typedef模板,这可能吗?

时间:2016-04-14 14:02:06

标签: c++ templates c++11 typedef

是否可以执行以下操作:

template< typename T >
using T_CCUnit = static const constexpr T;

实际上我只想要static const constexpr的别名,因为每次在某个文件中编写都很无聊。 我更喜欢c ++ 11中的解决方案。

4 个答案:

答案 0 :(得分:3)

你可以很容易地为类型添加const-ness,因为cv-qualifiers修改了类型:

template <typename T>
using T_C = std::add_const_t<T>;

但是,staticconstexpr修改声明,而不是类型。所以,在这里:

                         int x1;
                   const int x2;
  static           const int x3;
  static constexpr const int x4;
//      |    ^    |  type   |name
//   ^  | constexpr specifier
// storage class specifier

最后三个声明都是const int类型,但x2的存储类别与x3x4不同。

老实说,如果主要问题是那个

  

......写作真的很无聊......

我最好的建议是,您将学习如何在首选编辑器中编写宏或保存常用代码段。

答案 1 :(得分:0)

我认为最适合您的解决方案是使用宏。

#define STATIC_CONST_CONSTEXPR static const constexpr

但严重的是,staticconstexpr不是该类型的修饰符。在您的情况下,using所能做的就是const T。其他任何你自己写的或要求预处理器为你写。

答案 2 :(得分:0)

static存储限定符适用于实例,而不适用于类型。因此typedef它是不可能的。

答案 3 :(得分:0)

您不能输入staticconstexpr - 也不属于该类型。也就是说,即使你可以,没有人会知道:

T_CCUnit<int> x = 4;

意味着,但每个人都会知道:

static constexpr int x = 4;

装置。每次输入额外的7个字符是值得的,以使您的代码更清晰。所有读者的代码和未来的自我都会感谢你。

附注,constconstexpr来说是多余的 - 声明为constexpr的每个变量都隐含const