静态多态性中的纯抽象函数等价物是什么
what is the equivalent of pure abstract function in static polymorphism?
通过动态多态性,我可以创建无法实例化的接口,因为有些方法是纯虚拟的。
静态多态性的等价物是什么?
请考虑以下示例:
template<typename T> string f() { return ""; }
template<> string f<int>() { return "int"; }
template<> string f<float>() { return "float"; }
我想"禁用"第一个,就像我声明一个类的方法为纯虚拟一样。
问题:
静态多态性的等价物是什么?
声明一个没有实现的函数模板。仅为要支持的类型创建实现。
// Only the declaration.
template<typename T> string f();
// Implement for float.
template<> string f<float>() { return "float"; }
f<int>(); // Error.
f<float>(); // OK
更新
static_assert
用途 :
#include <string>
using std::string;
template<typename T> string f() { static_assert((sizeof(T) == 0), "Not implemented"); return "";}
// Implement for float.
template<> string f<float>() { return "float"; }
int main()
{
f<int>(); // Error.
f<float>(); // OK
return 0;
}
编译器报告:
g++ -std=c++11 -Wall socc.cc -o socc
socc.cc: In function ‘std::string f()’:
socc.cc:6:35: error: static assertion failed: Not implemented
<builtin>: recipe for target `socc' failed
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 将自定义函数传递到基抽象类中以延迟执行
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 为每个抽象函数定义主体后,对VTable的不确定引用
- 使用抽象函数时未处理的异常
- 静态多态性中的纯抽象函数等价物是什么
- 使用继承的函数而不是基函数(不是抽象函数)
- 在C++中为纯虚拟/抽象函数添加主体
- C++通过继承函数实现继承的抽象函数
- 抽象函数参数格式及其对性能的影响
- C++ 继承抽象函数
- 抽象函数和变量参数列表
- 为std::function赋值抽象函数——为什么std::ref是一个解决方案
- c++继承与抽象函数实现
- 关于在c++中实现抽象函数的问题
- 类属性的Matlab抽象的C++等价物
- 编写一个抽象函数可以将整数转换为字符串