【发布时间】:2013-02-12 17:46:03
【问题描述】:
std 库在类模板中有类型,需要该类型覆盖某些 OPERATORS,例如,我们在 std::map 中使用的类型需要该类型支持
但是要求某些功能是好事吗?考虑这个愚蠢的例子
template <typename T> struct Foo {
T t;
Foo() {
t.push_back(0);
}
};
int main() {
Foo<std::vector<int>> foo;
return 0;
}
我已经创建了一个类模板 Foo,它的类型需要有一个 push_back 成员函数。这种设计对于 c++ 编码人员来说是否可以接受/通用?
【问题讨论】:
-
您的代码完全没问题。但是,如果您仍然知道某种具有 push_back 函数的基类,并且如果您还知道与 Foo 一起使用的每个类都将从该基类扩展,请使用指向该基类的指针。 (例如,可以通过两种方式创建 COM 对象的
SafeRelease()函数,例如SafeRelease<COMInterfaceType>()和SafeRelease(IUnknown * i),我更喜欢第二种方式)
标签: c++