首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“模板”和函数声明之间使用: template<typename trait> Using tr = base_trait<trait> void fn(tr::type arg) { ... }

在“模板”和函数声明之间使用: template<typename trait> Using tr = base_trait<trait> void fn(tr::type arg) { ... }
EN

Stack Overflow用户
提问于 2018-09-26 03:30:20
回答 1查看 42关注 0票数 0

有没有可能在template关键字和函数声明(以及可能的对象声明等)之间使用别名?

代码语言:javascript
复制
template<typename trait> 
using tr = base_trait<trait> 

void fn(tr::type arg) { // edit: typename has to be here?

} 

如果没有,我该如何实现这种级别的可读性呢?

我想出的变种并不完美:

代码语言:javascript
复制
template<typename trait>
struct base_trait : trait {
    using thetype = typename trait::thetype;
};


struct int_trait {
    using thetype = int;
};


/* the pretty version which doesn't compile */
template <typename trait>
using tr = base_trait<trait>. 

void fn(tr::thetype arg) {
    // tr::

}

fn<int_trait>(1);


/* ugly long arglist version which works */
template <typename trait>
void fn(typename base_trait<trait>::thetype arg1, typename base_trait<trait>::thetype arg2) {
    using tr = base_trait<trait>; 

    // tr:: 
}

fn<int_trait>(1);


/* another boilerplate version that still requires `typename` */
template <typename tr>
void fn(typename tr::thetype arg) {
    // typename tr::  

    // wait, I have to type and read typename everywhere... (unless I add `using boilerplateusing = tr; edit: this using should not help?)
}

template <typename trait>
using boilerplateusing = fn<base_trait<trait>>;

boilerplateusing<int_trait>(1);
EN

回答 1

Stack Overflow用户

发布于 2018-09-26 03:34:22

只需添加另一个默认带有特征的type成员的模板参数,如下所示

代码语言:javascript
复制
template<typename trait, typename arg_t = typename base_trait<trait>::thetype> 
void fn(arg_t arg) {

} 

或者如果你想保留你可以使用的特征类型

代码语言:javascript
复制
template<typename trait, typename tr = base_trait<trait>> 
void fn(typename tr::thetype arg) {

}

或者您可以使用以下命令同时获得两者

代码语言:javascript
复制
template<typename trait, 
         typename tr = base_trait<trait>,
         typename arg_t = typename tr::thetype> 
void fn(arg_t arg) {

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52505474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档