可以通过typedefed将`auto const * const`转换成一些单字类型吗?

时间:2016-01-11 11:09:47

标签: c++ const auto

我想通过创建类似

的typedef来简化auto const*const构造的输入
// (pseudocode)
using deepcp=auto const*const;
deepcp a=f(1),b=f(2),c=f(3);
auto lam=[](deepcp x,deepcp y,deepcp z){ return *x+*y+*z; };

我能用C ++实现类似的东西吗?也许模板别名会有所帮助吗?

2 个答案:

答案 0 :(得分:3)

假设f是一个函数(而不是一些返回不同类型的宏),f返回一些原始指针类型,你可以使用decltype:

using ret_f_t = decltype(f(1)); 
using pointee_t = std::pointer_traits<ret_f_t>::element_type;
using deepcp std::add_const<pointee_t>::type * const;

或者,作为一行mumbo jumbo:

using deepcp = std::add_const<
  std::pointer_traits<decltype(f(1))>::element_type
>::type * const ;

耶。

注意:我使用add_const因为我不知道你的例子中f是否返回指针或const指针,即pointee_t是否为const - 这种方式有效两种可能性。

[Example]

答案 1 :(得分:0)

#define deepcp auto const * const

会做出你的出价