尝试使用C ++ 11在G ++下编译单独的C ++测试文件时收到以下错误。
spike/cur_spike.cpp: In function ‘int main()’:
spike/cur_spike.cpp:60:44: error: no matching function for call to ‘callFunctionFromName(<unresolved overloaded function type>, std::__cxx11::string&)’
callFunctionFromName (outputLine, param);
^
spike/cur_spike.cpp:49:7: note: candidate: template<class funcT, class ... Args> funcT callFunctionFromName(funcT (*)(Args ...), Args ...)
funcT callFunctionFromName (funcT func(Args...), Args... args) {
^
spike/cur_spike.cpp:49:7: note: template argument deduction/substitution failed:
spike/cur_spike.cpp:60:44: note: couldn't deduce template parameter ‘funcT’
callFunctionFromName (outputLine, param);
^
这是代码。
#include <iostream>
#include <string>
template <typename T>
void outputLine (T text) {
std::cout << text << std::endl;
}
template <typename funcT>
funcT callFunctionFromName (funcT func()) {
return func ();
}
template <typename funcT, typename... Args>
funcT callFunctionFromName (funcT func(Args...), Args... args) {
return func (args...);
}
int main () {
std::string param = "Testing...";
callFunctionFromName (outputLine, param);
return 0;
}
我目前正在使用G ++在Linux系统上构建此代码片段,此代码段包含与此问题相关的所有代码。我特别感兴趣的是,编译器由于某种原因无法推断出模板参数funcT
,即使outputLine
函数具有明确的返回类型void。
使用outputLine
设置void (*outputLinePtr)(std::string) = outputLine
的指针并使用指针作为参数不会做任何事情。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以手动设置模板参数。
callFunctionFromName (outputLine<std::string>, param);