c++ - 如何为模板类型创建别名?
问题描述
我有一些模板类,其声明如下所示:
template <typename T, typename A, typename B, typename C>
class foo1;
template <typename T, typename A, typename B, typename C>
class foo2;
...
我在以下上下文中使用它们(每个foo*
都用A
and实例化,B
并且用C
它bar
实例化):
template <typename A, typename B, typename C>
class bar {
foo1<int, A, B, C> f1;
foo2<int, A, B, C> f2;
foo2<char, A, B, C> f3;
};
出于简单和清晰的原因,我希望能够省略A
,B
和C
里面的参数bar
,只写:
...
foo1<int> f1;
...
我知道我可以对所有foo
类型使用别名模板,如下所示:
template <typename T>
using foo1_a = foo1<T, A, B, C>;
但是类型可能很多,foo
并且需要为所有类型创建别名。
我试图将所有这些别名放在一个类中:
template <typename A, typename B, typename C>
class types {
template <typename T>
using foo1_a = foo1<T, A, B, C>;
...
};
然后用法如下所示:
...
using t = types<A,B,C>;
typename t::template foo1_a<int> f1;
...
但在我看来,这看起来更糟......
是否有可能以其他方式实现这一目标?
解决方案
关于什么
template <template <typename...> class Cnt, typename T>
using bar = Cnt<T, A, B, C>;
用过的
bar<foo1, int> f1;
bar<foo2, int> f2;
bar<foo2, char> f3;
?
推荐阅读
- jhipster - jhipster应用在微服务中的使用
- python - 警告命令缺少需求错误
- amazon-web-services - AWS Amplify CDK Cognito 身份池创建错误
- javascript - 在Python中使用Selenium将复选框隐藏到没有ID的按钮中
- python - 在字符串单词之间添加空格
- jestjs - 使用 Vue3 的 vue-i18n 插件时,Jest 错误“SyntaxError: Need to install with `app.use` function”
- laravel - 返回每个关系的模型都匹配特定条件的 Builder
- ios - 将 `AVSpeechSynthesizer` 与 `MPRemoteCommandCenter` 一起使用
- c++ - 基于模板参数的编译时枚举类定义
- linux - libcurl curl_easy_perform返回OK,但没有调用响应回调函数