标题:C++11可变参数模板
作者:kingkong
日期:2015-10-17 09:40
内容:
template
class myfunction //基本类模板
{
};
template
class myfunction //普通函数指针特化版本
{
typedef R (*Ptr)(Args...);
Ptr m_p;
public:
myfunction(Ptr p) : m_p(p)
{
}
R operator()(Args... args)
{
return m_p(args...);
}
};
template
class myfunction//成员函数特化版本1
{
typedef R (T::* mPtr)(Args...);
mPtr m_p;
public:
myfunction(mPtr p):m_p(p)
{
}
R operator()(T& likeThis, Args...args)
{
return (likeThis->*m_p)(args...);
}
};
template
class myfunction //成员函数特化版本2
{
typedef R (T::* mPtr)(Args...);
mPtr m_p;
public:
myfunction(mPtr p):m_p(p)
{
}
R operator()(T likeThis, Args...args)
{
return (likeThis.*m_p)(args...);
}
};
template
class myfunction //成员函数特化版本3
{
typedef R (T::* mPtr)(Args...);
mPtr m_p;
pu ..
#1 [彩阳 10-17 09:44]
这个也不知道。看看不同编译器的行为是否一致?MSVC的和g++的都试试看?
#2 [kingkong 10-17 09:46]
VS2013 GCC4.9.2都试过了结果都是直接匹配到成员函数版本2 匹配失败直接报错了