gpt4 book ai didi

c++ - 模板特化实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:31 25 4
gpt4 key购买 nike

我必须实现模板特化,在实现专用模板类编译器的构造函数时会产生一些错误。以下是我的代码:

#include <iostream>
using namespace std;

// class template

template <typename T>
class mycontainer
{

T element;
public:
mycontainer (T arg);
T increase () {return ++element;}
};

// class template specialization
template <>
class mycontainer <void> {
int element;
public:
mycontainer (int arg);

char uppercase ()
{
return element;
}
};

template<typename T> mycontainer<T>::mycontainer(T arg){
cout << "hello T" << endl;
}

template<typename T> mycontainer<void>::mycontainer(int arg){
cout << "hello Empty" << endl;
}

int main () {
mycontainer<int> myint (7);
mycontainer<void> myvoid (6);
cout << myint.increase() << endl;
return 0;
}

代码产生这些错误:

test.cpp:31:22: error: prototype for ‘mycontainer<void>::mycontainer(int)’ does not match any in class ‘mycontainer<void>’
test.cpp:16:26: error: candidates are: mycontainer<void>::mycontainer(const mycontainer<void>&)
test.cpp:19:5: error: mycontainer<void>::mycontainer(int)

关于如何解决这些错误的任何线索?

最佳答案

你的完全特化语法是错误的,你不应该使用 template<typename T> mycontainer<void>甚至没有 template<>

为什么?请参阅 C++ 模板书中的引用:

完整的特化声明在这方面与普通的类声明相同(它不是模板声明)。唯一的区别是语法和声明必须匹配先前模板的事实声明。 因为它不是模板声明,所以可以使用普通的类外成员定义语法来定义完整类模板特化的成员(换句话说,不能指定模板<>前缀):

也可以做

mycontainer<void>::mycontainer(int arg){
cout << "hello Empty" << endl;
}

或者做:

#include <iostream>
using namespace std;

// class template

template <typename T>
class mycontainer
{

T element;
public:
mycontainer<T>::mycontainer(T arg)
{
cout << "hello T" << endl;
}
T increase () {return ++element;}
};

// class template specialization
template <>
class mycontainer <void> {
int element;
public:
mycontainer (int arg)
{
cout << "hello Empty" << endl;
}

char uppercase ()
{
return element;
}
};


int main () {
mycontainer<int> myint (7);
mycontainer<void> myvoid (6);
cout << myint.increase() << endl;
return 0;
}

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

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