当前位置: 首页 > 知识库问答 >
问题:

静态多态性中纯抽象函数的等价是什么?

裴良弼
2023-03-14
template<typename T> string f() { return ""; }
template<> string f<int>() { return "int"; }
template<> string f<float>() { return "float"; }

我想“禁用”第一个,类似于当我声明一个类的方法为纯虚的时候。

共有1个答案

史承福
2023-03-14

问题:

静态多态性的等价物是什么?

声明没有实现的函数模板。只为要支持的类型创建实现。

// Only the declaration.
template<typename T> string f();

// Implement for float.    
template<> string f<float>() { return "float"; }

f<int>();   // Error.
f<float>(); // OK
#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
 类似资料:
  • 有人能提供一个简单的例子来解释Java中动态多态性和静态多态性之间的区别吗?

  • 本文向大家介绍什么是C#中的静态成员函数?,包括了什么是C#中的静态成员函数?的使用技巧和注意事项,需要的朋友参考一下 静态函数只能访问静态变量。静态函数甚至在创建对象之前就已存在。 将静态函数设置为- 以下是演示静态函数用法的示例- 示例 输出结果

  • 问题内容: 谁能提供一个简单的示例来说明Java中动态和静态多态性之间的区别? 问题答案: 多态性 1.静态绑定/编译时绑定/早期绑定/方法重载。(在同一类中) 2.动态绑定/运行时绑定/后期绑定/方法重写(在不同的类中) 重载示例: 首要示例:

  • 问题内容: 按照标准书,构造函数是用于初始化对象的一种特殊类型的函数。由于构造函数被定义为一个函数,并且内部类函数只能具有两种类型的静态或非静态类型。我怀疑是什么构造函数? 我的疑问是如果构造函数是静态方法,那么我们如何在构造函数内部频繁使用此方法 输出是否意味着构造函数是非静态的? 问题答案: 您的第二个例子很重要。引用在构造函数中可用,这意味着构造函数是针对某个对象(当前正在创建的对象)执行的

  • 本文向大家介绍静态和动态多态性有什么区别?,包括了静态和动态多态性有什么区别?的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。被子类覆盖的方法称为运行时多态。JVM确定要在运行时而不是编译时执行的方法。在参数不同的同一类中,方法重载是静态多态的一个示例,编译器在编译时就知道要执行哪种方法。

  • 问题内容: 这些对象调用之间有什么区别? 非静态: 静态的: 而且在内部为什么还要对函数使用static属性? 例: 问题答案: 静态函数,根据定义,不能也不依赖于该类的任何实例属性。也就是说,它们不需要类的实例来执行(因此,可以如您所显示的那样执行,而无需先创建实例)。从某种意义上讲,这意味着该函数不必(也永远不需要)依赖于类的成员或方法(公共或私有)。