C++ c++;类型特征:为什么可以';我是否从另一个模板调用模板化的静态方法/enable_if行?
我想在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 |标准::
$ 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::如果启用,则启用