C++调用时指定函数的非模板化版本

C++ specify non-templated version of function when calling

本文关键字:版本 函数 调用 C++      更新时间:2023-10-16

我想知道,有没有办法强制调用非模板函数,例如:

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);

你只需要像这样制作一个演员表:

foo(const_cast<const int &>(a));
foo((const int&)a);

调用 int 版本。

我想

问题是您在通常的函数中使用了const。在模板中,它不const T&为参数。这就是调用模板版本的原因。您也可以使用将参数更改为(const int&)a,而不是简单地传递a