Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;类型特征:为什么可以';我是否从另一个模板调用模板化的静态方法/enable_if行?_C++_Templates_Static Methods_Typetraits - Fatal编程技术网

C++ c++;类型特征:为什么可以';我是否从另一个模板调用模板化的静态方法/enable_if行?

C++ c++;类型特征:为什么可以';我是否从另一个模板调用模板化的静态方法/enable_if行?,c++,templates,static-methods,typetraits,C++,Templates,Static Methods,Typetraits,我想在enable_if表达式中的函数的模板参数中使用静态方法。但是,静态方法也是一个模板,我会遇到编译器错误 错误消息: $ g++ test.cpp test.cpp:20:36: error: invalid declarator before ‘(’ token 20 | std::enable_if_t<A::method_a<param>()> $g++test.cpp test.cpp:20:36:错误:标记“(”之前的声明符无效 20 |标准::

我想在enable_if表达式中的函数的模板参数中使用静态方法。但是,静态方法也是一个模板,我会遇到编译器错误

错误消息:

$ g++ test.cpp
test.cpp:20:36: error: invalid declarator before ‘(’ token 
   20 | std::enable_if_t<A::method_a<param>()>
$g++test.cpp
test.cpp:20:36:错误:标记“(”之前的声明符无效
20 |标准::启用
代码示例:

#包括
结构B
{
模板
静态constexpr int方法_a()
{
返回参数==5;
}
静态constexpr int method_b(int参数)
{
返回参数==5;
}
};
//这不管用
模板
std::如果启用,则启用
func_a(a&a)
{}
//这很有效
模板
std::如果启用,则启用
func_b(A&A)
{}
int main()
{
B B;
func_b(b);//这不起作用
func_a(b);//这是有效的
返回0;
}

func\u a
中,名称
method\u a
是一个从属名称,即
method\u a
的含义取决于模板类型参数
a
。如果名称是成员模板,则需要使用
模板
关键字指定:

template<int param, typename A>
std::enable_if_t<A::template method_a<param>()>
                 // ^^^^^^^^
func_a(A& a){}
模板
std::如果启用,则启用