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

Bik*_*eev 2 c++ templates

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

template <class T>
void foo(T&);

void foo(const int&);

void bar()
{
   int a;
   foo(a); // templated version is called, not a usual function
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

你可能会这样做

foo(const_cast<const int&>(a));
Run Code Online (Sandbox Code Playgroud)

要么

foo(static_cast<const int&>(a));
Run Code Online (Sandbox Code Playgroud)

或通过中间变量

const int& crefa = a;
foo(crefa);
Run Code Online (Sandbox Code Playgroud)

或包装:

foo(std::cref(a));
Run Code Online (Sandbox Code Playgroud)

或者指定foo:

static_cast<void(&)(const int&)>(foo)(a);
Run Code Online (Sandbox Code Playgroud)