1
一個仿函數模板類,需要注意以下已簡化如何調用與模板函數
#include <type_traits>
template <class FuncT, class FuncArgT>
class UnaryFunctor
{
FuncT func;
public:
UnaryFunctor(FuncT const& func) : func(func) {}
template <class ArgsT> struct result {};
template <class F, class ArgT>
struct result < F(ArgT) >
{
typedef typename std::result_of<FuncT(ArgT)>::type type;
};
template <class ArgT>
typename result<UnaryFunctor(ArgT)>::type
inline operator()(ArgT const& arg) const
{
return func(arg);
}
};
template <class FuncT, class ArgT>
struct Result
{
typedef typename std::result_of<UnaryFunctor<FuncT, ArgT>(ArgT)>::type type;
};
template <class FuncT, class ArgT>
typename Result<FuncT, ArgT>::type
inline unary_apply(FuncT const& func, ArgT const& arg)
{
return UnaryFunctor<FuncT, ArgT>(func)(arg);
}
所以基本上的目的是調用與正在通過的值的函數一元仿函數的代碼。 可以說我們有以下兩個簡單的功能。
template <class T> T addValueTemplate(T const& val) { return val + 3; }
unsigned int addValue2(unsigned int const& val) { return val + 3; }
調用,這是好的
unsigned int i = 1, j;
j = unary_apply(&addValue2, i);
,但我不能工作,如何做同樣的事情,但對於模板類addValueTemplate。例如,這不會編譯
j = unary_apply(&addValueTemplate<unsigned int>, i);
有沒有辦法做到這一點? 這在編譯的方式GCC不錯,但不是MSVC
*這不會編譯*,你得到什麼錯誤? – 2014-11-23 08:51:18
它編譯於GCC很好,但不是在MSVC所以我螺母知道什麼問題是 – xerion 2014-11-23 08:52:33
,如果這是具體的編譯器錯誤,那麼(1)。給出確切的編譯器版本,(2)。給出確切的錯誤信息 – 2014-11-23 08:53:14