C++ generic classes

C++ generic classes

本文关键字:classes generic C++      更新时间:2023-10-16

我有一个关于c++中泛型类的(简单)问题。我对在类似C#的列表中使用它们有一些了解,但现在我试图在C++中实现一个,但我遇到了一个错误,我不知道该怎么做才能让程序正常工作。这不是家庭作业或我需要做的事情,而是我自己的研究。

代码:

#include <iostream>
using namespace std;
template<class A>class genericClass
{
    A ceva;
    char* clasa;
public: 
    void afisClasa(void);
    genericClass(A);
    ~genericClass(void);
};
template<class A>genericClass<A>::afisClasa()
{
    cout << clasa;
}
template<class A>genericClass<A>::genericClass(A myType)
{
    myType = ceva;
    if((int)ceva == ceva)
    {
        clasa = "INT";
        goto label;
    }       
    if((float)ceva == ceva)
    {
        clasa = "FLOAT";
        goto label;
    }   
    if((double)ceva == ceva)
    {
        clasa = "DOUBLE";
        goto label;
    }   
    label:
    //cout << clasa;
}
template<class A>genericClass<A>::~genericClass(void)
{
}

int main()
{
    int n;
    genericClass<float> A(6.2);
    cin >> n;
}

这个程序应该取一个泛型数字并说明它是什么类型,但当我实现afisClass方法时,我得到了一个错误:

C4430: Missing type specifier - int assumed. Note c++ does not support default-in

你必须说:

template <class A> void genericClass<A>::afisClasa() { cout << clasa; }
//                 ^^^^

函数定义必须具有与上一个声明完全相同的形式。

在这种情况下,您可能想要进行模板专门化。C++允许您根据模板的实例化类型自定义模板的行为。例如

template <typename T> 
void PrintMyType(T& arg) {
  cout << "Unknown type" << endl;
}
template <>
void PrintMyType<int>(int& arg) {
  cout << "int" << endl;
}
template <>
void PrintMyType<float>(float& arg) {
  cout << "float" << endl;
}
PrintMyType(42);  // prints "int"
PrintMyType("hello"); // prints "Unknown type"