C++ 推导泛型类型的类枚举
考虑这个简单但完整的示例:C++ 推导泛型类型的类枚举,c++,templates,C++,Templates,考虑这个简单但完整的示例: #include <iostream> enum class Foo { A, B }; template <Foo F> struct X{}; template <Foo F> constexpr Foo deduce_foo(X<F>&& arg) { return F; } int main() { if ( deduce_foo(X<Foo::B&g
#include <iostream>
enum class Foo
{
A,
B
};
template <Foo F>
struct X{};
template <Foo F>
constexpr Foo deduce_foo(X<F>&& arg)
{
return F;
}
int main()
{
if ( deduce_foo(X<Foo::B>{}) == Foo::A )
std::cout << "A";
else
std::cout << "B";
std::cout << std::endl;
}
但是编译器(g++7.3.0)给了我以下错误:
错误:“T”不是模板
constexpr-Foo推导_-Foo(X&&arg)
我做错了什么?您需要声明T是一个模板,请尝试:
template <Foo F, template<Foo> class T>
constexpr Foo deduce_foo(T<F>&& arg)
{
return F;
}
模板
constexpr-Foo推导_-Foo(T&&arg)
{
返回F;
}
您的typename T
实际上不是一个“typename”。这是一个模板,而不是特定类型的名称。可能重复:它应该是template constepr Foo演绎_Foo(C&&arg){…}
@Jarod42谢谢,工作正常
template <Foo F, template<Foo> class T>
constexpr Foo deduce_foo(T<F>&& arg)
{
return F;
}