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
}
你可以这样做
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
相关文章:
- 用符号版本替换对函数的所有调用
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 用非纯虚拟版本重载纯虚函数
- 重载模板函数未为特定类型选择正确的版本
- Python 的 exec() 函数的 C++ 版本
- "std::function"的简单版本:函数对象的生存期?
- C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样,怎么办?
- 在h文件上内联发布版本并在cpp上实现调试版本的函数
- 我可以删除对象的右值版本的函数吗?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- C++14 强制转换以返回成员函数的类型 - 简洁版本
- 所有版本的 GCC 都与默认成员初始值设定项作斗争,该初始值设定项捕获了这一点,并结合了继承的构造函数
- 根据运行时参数调用模板函数的不同版本
- 函数的内联版本返回的值与非内联版本不同
- 如何从非递归版本定义斐波那契函数
- 如何避免const版本函数的代码重复