作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑这个简单但完整的示例:
#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;
}
正确推导枚举类
(函数deduce_foo(...)
)。
现在,我想让它更通用,用模板 T 替换 X,即:
template <Foo F, typename T>
constexpr Foo deduce_foo(T<F>&& arg) { ... }
但是编译器 (g++ 7.3.0) 给我这个错误:
error: ‘T’ is not a template constexpr Foo deduce_foo(X&& arg)
我做错了什么?
最佳答案
你需要声明T是一个模板,试试:
template <Foo F, template<Foo> class T>
constexpr Foo deduce_foo(T<F>&& arg)
{
return F;
}
关于c++ - 为泛型推导类枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49114552/
我是一名优秀的程序员,十分优秀!