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

时间:2015-01-02 11:07:07

标签: 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
}

4 个答案:

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