我有两个称为writeLine()的函数。我以为main()中的行会调用第一个writeLine(),但它会调用第二个writeLine()。如何调用第一个writeLine()函数?我只是很好奇,所以我稍后再知道是否可能。这是一个最小的示例:
#include <iostream>
#include <cstdarg>
void writeLine(const char *format, ...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
}
template <typename Key, typename Value>
void writeLine(const Key &key, const Value &value, const char *separator = " ")
{
std::cout << key << separator << value << std::endl;
}
int main()
{
writeLine("%s is a test.", "This");
return 0;
}
预期输出:“这是一个测试。”
当前输出:“%s是一个测试。这”
最佳答案
您可以将功能模板限制为不是char const *
的类型,
template <typename Key, typename Value>
std::enable_if_t<std::negation_v<std::is_same<std::decay_t<Key> , char *>>, void>
writeLine(const Key &key, const Value &value, const char *separator = " ")
{
std::cout << key << separator << value << std::endl;
}
因此非模板功能是唯一的选择。
这是一个工作的demo
关于c++ - 如何调用非模板方法而不是模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193745/