gpt4 book ai didi

c++ - 推导类的模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:38 25 4
gpt4 key购买 nike

谁能帮我理解为什么下面的代码不能编译:

#include <type_traits>

template< typename T >
class A
{};

template< typename T >
class B
{};

template< template <typename T> class GENERAL_t, // Note: GENERAL_t is either A<T> or B<T>
typename = std::enable_if_t< std::is_same<T,int>::value >
>
void foo( GENERAL_t a )
{}

错误信息:

t.cpp:67:57: error: use of undeclared identifier 'T'
typename = std::enable_if_t< std::is_same<T,int>::value >
^
t.cpp:67:65: error: no type named 'value' in the global namespace
typename = std::enable_if_t< std::is_same<T,int>::value >
~~^
t.cpp:69:15: error: use of class template 'GENERAL_t' requires template arguments
void foo( GENERAL_t a )
^
t.cpp:66:43: note: template is declared here
template< template <typename T> class GENERAL_t, // Note: GENERAL_t is either A<T> or B<T>
~~~~~~~~~~~~~~~~~~~~~ ^
3 errors generated.

这里,foo 应该采用 class Aclass B 的实例,但只有当模板参数 T AB 是一个 int

最佳答案

  • 你还没有声明T .它需要是一个模板参数。

  • 删除 Ttemplate <class T> class GENERAL_t

  • GENERAL_t是模板模板,因此需要模板参数。

  • 除了宏,请不要对任何内容使用 ALL_CAPS

这是工作代码:

template<class T, template <class> class General_t, 
class = std::enable_if_t< std::is_same<T,int>::value >
>
void foo(General_t<T> a)
{}

关于c++ - 推导类的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46565515/

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