gpt4 book ai didi

c++ - 为泛型推导类枚举

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:52 25 4
gpt4 key购买 nike

考虑这个简单但完整的示例:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com