gpt4 book ai didi

c++ - 为模板化类定义特征

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

我了解如何创建类型特征,然后专门针对特定类,但就我而言,我想专门针对类模板。下面的代码无法编译,但想法是 MyTemplatisedClass 的 Traits 特化应该适用于用户决定与 MyTemplatisedType 一起使用的任何类型。

class Traits
{
public:
static bool someProperty(void) { return false; }
};

template<typename Type>
class MyTemplatisedClass
{
};

template<typename Type>
template<>
class Traits< MyTemplatisedClass<Type> >
{
public:
static bool someProperty(void) { return true; }
};

int main(int argc, char* argv[])
{
std::cout << Traits< MyTemplatisedClass<float> >::someProperty() <<std::endl; //This should be true
return 0;
}

这是可能的还是我要求太多了?根据编译器,第一个问题是

error C2989: 'Traits' : class template has already been declared as a non-class template    

哪个是正确的,但我该如何解决这个问题? 如果它有任何不同,我不需要它为非模板化类工作,只需要模板化类就可以了。 编辑: 实际上,如果它适用于模板化类和非模板化类。

最佳答案

Traits需要一个模板才能特化。

在特化中删除空行 <> : 这不是嵌套在模板或其他东西中的模板。

template <typename Type> //can only specialize templates
class Traits
{
public:
static bool someProperty(void) { return false; }
};

template<typename Type>
class MyTemplatisedClass
{
};

template<typename Type>
//template<> //Too much here
class Traits< MyTemplatisedClass<Type> >
{
public:
static bool someProperty(void) { return true; }
};

但是,如果您指的是具有一个类型参数的任何模板的特化,那么这将是:

template < template <class> class SomeTemplatizedType, class Type>
// ^^^^^^^^^^^^^^^^^^^^^^
// names a template, not type
class Traits< SomeTemplatizedType<Type> >;
// ^^^^^^^^^^^^^^^^^^^ ^
// template name |
// argument

关于c++ - 为模板化类定义特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606302/

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