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 版本。