相关疑难解决方法(0)

709
推荐指数
11
解决办法
17万
查看次数

如果不存在,则调用自由函数而不是方法

假设您有一系列类型无关的类通过返回值的给定方法实现一个通用概念:

class A { public: int val() const { ... } };
class B { public: int val() const { ... } };
Run Code Online (Sandbox Code Playgroud)

假设您需要一个通用的自由函数,它T为任何未实现该val方法的类型返回一个常规值,或者val为所有具有一个类型的类型调用该方法:

template<class T> int val_of(const T& t) { return 0; }
template<class T> int val_of(const T& t) { return t.val(); }
Run Code Online (Sandbox Code Playgroud)

考虑A和B只是样本:您不知道将实现val多少类型,以及将不存在多少类型(因此显式特化不会扩展).

有没有一种基于C++标准的简单方法来静态选择val_of版本?

我正想着一个std::conditional或者std::enable_if,但我没有找到一种表达条件的简单方法.

c++ templates c++11

17
推荐指数
2
解决办法
929
查看次数

对象切片,有优势吗?

当子类被分配给基类时,对象切片是对象丢失其某些属性或函数的一些东西.就像是

Class A{

}
Class B extends A{

}

Class SomeClass{
A a = new A();
B b = new B();

// Some where if might happen like this */
a = b; (Object slicing happens)

}
Run Code Online (Sandbox Code Playgroud)

我们是否说对象切片在任何方面都是有益的?如果是的话,任何人都可以告诉我对象切片如何在开发中有用并且它可能有用吗?

oop slice

5
推荐指数
1
解决办法
2374
查看次数

标签 统计

c++ ×2

c++-faq ×1

c++11 ×1

inheritance ×1

object-slicing ×1

oop ×1

slice ×1

templates ×1