gpt4 book ai didi

c++ - "#define TYPE(x) typename decltype(x)"是个坏主意吗?

转载 作者:太空狗 更新时间:2023-10-29 23:32:47 26 4
gpt4 key购买 nike

定义是不是一个坏主意

#define TYPE(x) typename decltype(x)

作为在 C++11 中获取变量类的成员类型的快速方法?

理由:

考虑以下(过度简化的)示例:

#include <iostream>
#define TYPE(x) typename decltype(x)

class A {
public:
typedef int mtype;
void set(mtype const& x) { foo = x; }
mtype get() { return foo; }
private:
mtype foo;
};

A make() { return A(); }

int main() {
auto a = make();
TYPE(a)::mtype b = 3;
a.set(b);
std::cout << a.get() << "\n";
return 0;
}

也就是说,我有一个具有某些成员类型“mtype”的类和一个返回此类实例的函数。多亏了 auto,只要我知道我的函数完成了它的工作,我就不必担心类的名称。但是,有时我必须定义一个特定类型的变量,为方便起见,我的类中有一个 typedef 为“mtype”。

如果我只有变量名“a”,但我知道这个变量有这个类,我可以这样做

typename decltype(a)::mtype b;

定义一个类型为 A::mtype 的变量 b。

现在将这个“typename decltype”放入宏中是个坏主意吗?是否有明显的、常见的情况会崩溃?有没有更好的方法可以快速获得这种类型?

奖励:“a::mtype”会是最好的 - 有没有理由将其定义为标准中的“decltype(a)::mtype”?

最佳答案

是的,这很糟糕。使用 template-using相反:

template<class T>
using mtype_t = typename T::mtype;

用法:

auto a = make();
mtype_t<decltype(a)> b = 3;

关于c++ - "#define TYPE(x) typename decltype(x)"是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259472/

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