我想知道,有没有办法强制调用非模板函数,比如:
template <class T>
void foo(T&);
void foo(const int&);
void bar()
{
int a;
foo(a); // templated version is called, not a usual function
}
最佳答案
你可以
foo(const_cast<const int&>(a));
或
foo(static_cast<const int&>(a));
或通过中间变量
const int& crefa = a;
foo(crefa);
或包装器:
foo(std::cref(a));
或者指定foo
:
static_cast<void(&)(const int&)>(foo)(a);
关于C++调用时指定函数的非模板版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741143/