我试图使一个模板类作为占位符类,可以容纳诸如string和type T对象之类的东西。下面是我为此编写的代码。

#include <iostream>
#include <string>
#include <map>

using namespace std;

//A class which act as placeholder to hold
//unknown object. Something similar as Object
//in Java
template <typename T>
class Genric
{
    public:
        map<string, T> addP; //This will be placeholder for time
        // being.
};

class A
{
    public:
        Genric t1; //Have object of Genric class so that we can
        // access the member variable in future.
        void foo()
        {
            cout<<"Calling foo"<<endl;
        }
};

int main()
{
    A a1;
    a1.foo();
}

但是当我尝试编译时,我遇到了错误。
$ g++ tempClass.cxx
tempClass.cxx:21:9: error: invalid use of template-name 'Genric' without an argument list

上面的Genric类的目的只是用作将来可能填充的成员变量之一的占位符类。
因此,有没有一种方法可以编写这样的Genric类。

最佳答案

您正在将Genric定义为模板类,但随后尝试在不给其类型的情况下初始化t1。那就是你得到的错误。尝试例如:

Genric<int> t1;

或者,如果您正在寻找真正的运行时泛型,请查看 boost::any

09-27 14:16