矢量模板结构

Qia*_*ang 1 c++ templates vector

using namespace std;
#include <vector>
#include <string>

template <class T>
struct ValNode {
    string id;
    T value;
};

class ValTable {
public:
    ValTable();
    template <class T>
    void add(string,T);
    const bool find(string);
    void remove(string);
private:
    template<class T>
    std::vector<ValNode<T>*> vals;
};
Run Code Online (Sandbox Code Playgroud)

编译器错误:error: data member 'vals' cannot be a member template

我确实尝试在结构中使用T*值,但我没有解决.我还没有使用代码中的任何函数.只是试图将它编译成*.o文件(也带有.cpp文件).

Mik*_*our 6

正如错误所说,变量(包括数据成员)不能是模板; 只有类和函数可以.

看起来您希望表能够保存各种不同类型的值,这些值在运行时根据传递的类型指定add().为此,您需要动态类型,这些类型在C++中不受直接支持.您可以考虑像Boost.AnyBoost.Variant这样的库.

另一方面,也许您只想在每个表中存储单个类型,在不同的表中存储不同的类型.在这种情况下,类本身将需要是一个模板:

template <typename T>
class ValTable {
public:
    ValTable();
    void add(string,T);
    const bool find(string);
    void remove(string);
private:
    std::vector<ValNode<T>*> vals;
};
Run Code Online (Sandbox Code Playgroud)