首页 > 解决方案 > 另一个模板结构内的模板结构的别名

问题描述

我想编写一个函数类型,将类型转换为B相同类型但与另一种类型具有相同符号A。我可以使用这个功能来实现:

template <typename A, typename B, bool = std::is_signed_v<B>>
struct same_sign_as{
    using type = std::make_signed_t<A>;
};

template <typename A, typename B>
struct same_sign_as<A, B, false>{
    using type = std::make_unsigned_t<A>;
};

然后将其用作using R = same_sign_as_t<A,B>;.

但我希望我的代码可读。当我看到一个类似的函数时,same_sign_as我永远不知道它是指A带有符号的B类型还是B带有符号的类型A

因为我不想记住这种事情,所以我想写得更好一些类似于

using R = make_type<A>::same_sign_as<B>

有了这个,我不会犯任何错误。

很容易写:

template <typename A>
struct make_type{
    template <typename B>
    struct same_sign_as
    { using type = typename __same_sign_as<A, B>::type; };
};

我更改了same_sign_asfor的名称__same_sign_as(我希望这个函数成为一个实现细节)。

要使用make_type写入:

using Res = typename make_type<A>::template same_sign_as<B>::type

这太可怕了。你读不出来!!!

我可以定义一个别名来实现我的写作目标吗

using Res = make_type<A>::same_sign_as<B>

?

标签: c++templatesalias

解决方案


推荐阅读