结果类型我想专攻一个模板函数声明为:获取的功能
template<typename Type> Type read(std::istream& is);
然后我有很多的静态实现
static int read_integer(std::istream& is);
a.s.o.现在,我想要做一个宏这样读的是专业化是简单的:
SPECIALIZE_READ(read_integer)
所以我想我会去的boost :: function_traits方式并宣布SPECIALIZE_READ为:
#define SPECIALIZE_READ(read_function) \
template<> boost::function_traits<read_function>::result_type read(std::istream& is) { \
return read_function(is); \
}
但VC++(2008)编译器抱怨:'boost :: function_traits':'read_integer'不是用于参数'Function'的有效模板类型参数
想法?
那是因为你传递一个值(read_function)作为一种类型。它不会像C++ 03那样工作。在C++ 0x中,你可以使用decltype(read_function)。 – ltjax 2011-01-10 15:27:35
嗯,是吗?我还应该通过什么?我过去已经成功地将类函数与function_traits一起使用,并且我也将它用于函数,但我不知道为什么它在这种情况下不起作用...... – Robert 2011-01-10 19:07:04