【发布时间】:2016-03-07 12:18:13
【问题描述】:
我一直在尝试编写从文本输入文件读取和初始化图形的代码。
现在,图是一个模板类Graph<K, V>,其中K 是节点键的类型,V 是节点值的类型。
假设我想从这种形式的文本文件中输入一个图表:
char;int // the types
a;b;c // the keys
a;b,32;c,5 // edges starting from a
b;c,2 // edges starting from b
如何将类型存储在变量中以初始化图形?
我想做这样的事情:
getline(file, value, ';');
string keyTypeString = value;
getline(file, value);
string valueTypeString = value;
type keyType = ...
type valueType = ...
Graph<keyType, valueType> graph = ...
如何在 C++ 中做到这一点?有没有可能?
【问题讨论】:
-
C++ 是一种静态类型语言,类型是在编译时设置的,不能在运行时更改。所以不,你想做的事情是不可能的,你必须想出另一种方法来解决你的问题。
-
不,不是。至少不是你想象的那样。模板实例化的类型是静态的,在编译期间在任何文件打开之前就决定了。
-
你必须使用一个可以存储不同类型的对象。看看 boost::any
-
如果您的程序除了比较和打印标签之外没有对标签做任何有意义的事情,请始终使用
Graph<std::string,std::string>。
标签: c++ class templates generics