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文件).
正如错误所说,变量(包括数据成员)不能是模板; 只有类和函数可以.
看起来您希望表能够保存各种不同类型的值,这些值在运行时根据传递的类型指定add().为此,您需要动态类型,这些类型在C++中不受直接支持.您可以考虑像Boost.Any或Boost.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)
| 归档时间: |
|
| 查看次数: |
3191 次 |
| 最近记录: |