gpt4 book ai didi

c++ - Barton-Nackman 与 std::enable_if

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:46 26 4
gpt4 key购买 nike

什么是更可取的(如果有的话)?

变体 A(Barton-Nackman):

template<class T>
struct equal_comparable {
friend bool operator == (const T & t1, const T & t2) {
return t1.equalTo (t2);
}
};

class MyClass : private equal_comparable<MyClass> {
bool equalTo (const MyClass & other) //...
};

变体 B(std::enable_if):

struct MyClass {
static const bool use_my_equal = true;
bool equalTo (const MyClass & other) //...
};

template<class T>
typename std::enable_if<
T::use_my_equal,
bool
>::type
operator == (const T & t1, const T & t2) { return t1.equalTo (t2); }

最佳答案

我更愿意使用 Boost.Operators @SteveJessop 在评论中提到,它使您的第一种方法形式化并自动化。如果您碰巧需要多组运算符(因此需要多重继承),它们还会处理空基优化。与其说是节省了打字,还不如说是代码文档/执行值(value),因为这些基类就在类接口(interface)的前面。从这个意义上讲,它是概念的原始方式。

关于c++ - Barton-Nackman 与 std::enable_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com