我想知道,有没有办法强制调用非模板函数,如:
template <class T>
void foo(T&);
void foo(const int&);
void bar()
{
int a;
foo(a); // templated version is called, not a usual function
}
答案 0 :(得分:5)
你可以做
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);
答案 1 :(得分:1)
你只需要制作一个这样的演员:
foo(const_cast<const int &>(a));
答案 2 :(得分:0)
我想问题是你在通常的函数中使用const
。在模板中,它不是const T&
作为参数。这就是调用模板版本的原因。您也可以将参数更改为(const int&)a
,而不是简单地传递a
答案 3 :(得分:0)
foo((const int&)a);
调用int版本。