c++ - 另一个模板结构内的模板结构的别名
问题描述
我想编写一个函数类型,将类型转换为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_as
for的名称__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>
?
解决方案
推荐阅读
- http - 如何在基于 websocket 的应用程序中管理/使用 cookie?
- php - 在单个 WordPress 查询中组合两个(发布)参数
- laravel - 如何在刀片 laravel 中获取查询字符串?
- xamarin.forms - FreshMVVM 导航在离开模态页面时抛出异常
- react-native - React - WEBRTC - 点对点 - 视频通话 - 似乎不起作用
- azure - 是否可以使用 ARM 模板自动创建 Azure“运行方式”帐户?
- python - python中一维数组的简单转换
- javascript - 生成器关于产量的使用
- docusignapi - DocuSign API - 更新模板 PDF 文档
- ios - 让 actionSheet 打开新视图的问题 (SwiftUI)