【发布时间】:2017-01-14 00:29:04
【问题描述】:
假设我有以下类定义
struct base {
virtual int f() = 0;
};
struct A: public base {
int f() final { return 1; }
};
struct B: public base {
int f() final { return 2; }
};
是否可以将A 和B 转换为带有bool 参数的模板,该参数指定是否从base 继承?我有一些用例需要或不需要提供通用接口的基类。
假设A 和B 有很多成员函数,那么重复实现会很乏味。但是sizeof(A) 和sizeof(B) 很小。
【问题讨论】:
-
您需要两个版本吗?假设
base仅包含抽象函数,则不应该有任何运行时成本。在您的示例中,您的优化器应该看到任何A都将从那里使用f(),因为它是final。 -
@Guvante :它使类型具有多态性,从而为它提供了一个 vtable。不是运行时成本,但仍然是成本。
-
@Guvante 继承类型的大小大了一个指针的大小,指针指向vtable。
标签: c++ templates inheritance c++14