C++调用时指定函数的非模板版本
C++ specify non-templated version of function when calling
请问有没有办法强制调用非模板函数,比如:
template <class T>
void foo(T&);
void foo(const int&);
void bar()
{
int a;
foo(a); // templated version is called, not a usual function
}
我想问题是你在通常的函数中使用了 const
。并且在模板中它不是 const T&
作为参数。这就是调用模板版本的原因。您也可以使用将参数更改为 (const int&)a
而不是简单地传递 a
你可以
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);
你只需要像这样创建一个 cast const :
foo(const_cast<const int &>(a));
foo((const int&)a);
调用 int 版本。
请问有没有办法强制调用非模板函数,比如:
template <class T>
void foo(T&);
void foo(const int&);
void bar()
{
int a;
foo(a); // templated version is called, not a usual function
}
我想问题是你在通常的函数中使用了 const
。并且在模板中它不是 const T&
作为参数。这就是调用模板版本的原因。您也可以使用将参数更改为 (const int&)a
而不是简单地传递 a
你可以
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);
你只需要像这样创建一个 cast const :
foo(const_cast<const int &>(a));
foo((const int&)a);
调用 int 版本。