C++ 未检测到带有右值ref参数的成员函数具有\u成员特征
正如标题所说,我有一个成员函数,其中包含一个右值引用参数,我希望使用has_成员特征来检测该参数。如果函数是模板化的,has_member为false,即使我没有使用该模板参数 我认为该准则将更好地澄清我的问题:C++ 未检测到带有右值ref参数的成员函数具有\u成员特征,c++,c++11,C++,C++11,正如标题所说,我有一个成员函数,其中包含一个右值引用参数,我希望使用has_成员特征来检测该参数。如果函数是模板化的,has_member为false,即使我没有使用该模板参数 我认为该准则将更好地澄清我的问题: class A { public: void foo(int&&){} }; HAS_MEMBER(foo); //macro that creates the struct has_member_foo<TYPE, SIGNATURE> has
class A
{
public:
void foo(int&&){}
};
HAS_MEMBER(foo); //macro that creates the struct has_member_foo<TYPE, SIGNATURE>
has_member_foo<A, void (A::*)(int&&) >::value == true
class A
{
public:
template <typename T> //if the function is templated, it's not detected.
void foo(int&&){}
};
has_member_foo<A, void (A::*)(int&&) >::value == false
A类
{
公众:
void foo(int&&{}
};
有大学会员(foo)//创建结构的宏具有\u成员\u foo
has_member_foo确实,对于第二个类A,void A::foo(int&&)
不存在,但是void A::foo(int&)
存在。有没有办法在函数的签名中表达这一点?类似于的东西有\u member\u foo::value
?或者我必须修改has_member?对于最后一部分,应该需要来自has_member_foo
的代码。如果有帮助,我的(旧)宏会这样做。我们会的。这很有效,谢谢!对于我尝试过的has_member的早期版本,我无法做到这一点,因为它们将函数名附加到生成的类名中,因此它不能像t::template foo
那样。
class A
{
public:
template <typename T>
void foo(T&&){}
};
has_member_foo<A,void (A::*)(int&&)>::value //true for vs2015, false for vs2012
has_member_foo<A,void (A::*)(int&)>::value //true for vs2015, false for vs2012
has_member_foo<A,void (A::*)(const int&)>::value //true for vs2015, false for vs2012