是否有可能让方法返回不同类型的值,并且在运行时确定类型?返回不同类型的模板函数
我正在写一些东西,将使用不同的密码进行编码和解码。每个密码都有一个不同类型的密钥,并且在某个阶段,我需要允许密码获取此密钥。
为了避免写的三(有三个密码现在)不同的方法以返回不同类型的钥匙,而只有一个密码将在同一时间,我尝试做以下使用:
在parser.h
:
template <typename T>
T get_key(void) const;
在
parser.cpp
:
如何我想使用它:
Crypt<VignereCipher, std::string, Group, Pack> c(parser.get_key());
与clang++
编译给出:
main.cpp:42:61: error: no matching member function for call to 'get_key'
Crypt<VignereCipher, std::string, Group, Pack> c(parser.get_key());
~~~~~~~^~~~~~~
和
./cmdline_parser.h:40:7: note: candidate template ignored: couldn't infer template argument 'T'
T get_key(void) const;
^
函数没有参数,编译器无法从任何地方推导出类型。 – jrok 2013-04-28 11:19:23
你听说过变体类型吗?该变种将解决您的问题。 – AnatolyS 2013-04-28 11:20:15
听起来像一个多态的类层次结构和工厂的经典案例。 – 2013-04-28 11:20:48