是否可以在运行时确定类型的不同类型的方法返回值?
我正在写一些将使用不同密码进行编码和解码的东西。每个密码都有一个不同类型的密钥,在某个阶段我需要允许密码获取这个密钥。
为了避免编写三个(目前有三个密码)单独的方法来返回不同类型的密钥,并且一次只使用一个密码,我正在尝试执行以下操作:
在parser.h
:
template <typename T>
T get_key(void) const;
在parser.cpp
:
/**
* The key to be used for encoding or decoding.
*
* @return The key to be used.
*/
template <typename T>
T cmdline_parser::get_key(void) const
{
if (vm.count("xor") > 0)// if xor cipher in use
return vm["xor"].as<long>();// returns a key of type long
else if (vm.count("caesar") > 0)// if caesar cipher in use
return vm["caesar"].as<int>();// returns a key of type int
else// vignere cipher in use
return vm["vignere"].as<std::string>();// returns a key of type std::string
}
我如何尝试使用它:
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;
^