gpt4 book ai didi

c++ - 如何在 C++ 的模板化类中为单个方法创建专门化?

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

已经问了很多问题,它们与我在这里要问的问题相似,但我认为它们并不相同。

我有一个模板类:

namespace app {
template <typename T>
class MyCLass {
public:
void dosome();
void doother();
}
} /*ns*/

和实现:

template <typename T>
app::MyClass<T>::dosome() {}
template <typename T>
app::MyClass<T>::doother() {}

当我有一个类的实例,其中提供了一个 char 作为模板参数时,我希望函数 dosome() 以完全不同的方式运行。但我只是希望该函数的行为有所不同,其他一切都必须保持相同。

我试着输入:

template<>
app::MyCLass<char>::dosome() {
}

但是编译器告诉我,我正在尝试在不同的命名空间中创建一个特化。

所以当我有这样的代码时:

app::MyCLass<int> a;
app::MyCLass<char> b;
a.dosome(); // This must call the generic template definition
b.dosome(); // This must call the specialization
a.doother(); // This must call the generic template definition
b.doother(); // This must call the generic template definition

在其他问题中,我看到人们为整个类(class)创建了完全不同的特化。但我只想要一种方法的特化。

最佳答案

你可以做你想做的事:http://ideone.com/oKTFPC

//标题

namespace My
{

template <typename T>
class MyClass {
public:
void dosome();
void doother();
};

template <typename T> void MyClass<T>::dosome() {}
template <typename T> void MyClass<T>::doother() {}

template<> void MyClass<char>::dosome();

}

//cpp 或在标题中

template<>
void My::MyClass<char>::dosome() {
std::cout << "specialization" << std::endl;
}

或使用替代符号

namespace My {
template<>
void MyClass<char>::dosome() {
std::cout << "specialization" << std::endl;
}
}

关于c++ - 如何在 C++ 的模板化类中为单个方法创建专门化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701788/

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