【发布时间】:2013-06-27 11:22:40
【问题描述】:
这在今天似乎是一种常见的方法
auto foo(T a, K b) -> dectlype(a+b);
但是这段代码呢?
void foo(decltype(a));
其中“a”是某个类中变量的一种类型。喜欢:
class SomeClass
{
public:
void foo(decltype(a));
private:
int a;
};
现在,我知道旧式方法是使用 typedef:
typedef int IntType;
但是 decltype 呢?你怎么看?
在我看来 - 这有以下缺点:
- 不能在抽象接口中使用(没有“a”来获取类型 的)
- 使代码更难阅读
- 最常见的 IDE 不会生成 decltyped 函数的正确定义
我能想到的一个专业人士:
- 您无需更改 typedef 就可以安全地避免类型更改。
Tbh,我认为这种使用 decltype 的缺点远远超过了这种用法,但我想听听我以外的意见 :)
【问题讨论】:
-
目标是什么?确保函数参数类型与
a的类型完全相同? -
是的。这就是它的意义
-
"最常见的 IDE 不会为 decltyped 函数生成正确的定义" erm what
-
@Zeks 比写一个模板函数
template<typename T> void foo(T);。这对眼睛来说要容易得多,而且基本上是一样的。 -
@arne 除了模板不能与 Q_OBJECT 组合之外:)
标签: c++ c++11 coding-style