o.z*_*o.z 2 c++ alias typedef template-templates c++11
我有一个traits类,AttributeTraits,它使用智能指针模板类MySmartPointer:
template<typename T>
class MySmartPointer {};
template<template <typename> class SP = MySmartPointer>
struct AttributeTraits {
template <typename T>
using SmartPointerClass = SP<T>;
};
Run Code Online (Sandbox Code Playgroud)
AttributeTraits使用别名来保存它拥有的模板类.现在,我需要获取特征类的Attribute类将使用typedef/alias到智能指针类,例如:
template <typename Traits>
struct Attribute {
typedef typename Traits::SmartPointerClass<int> SmartPointerType; // error: non-template 'SmartPointerClass' used as template
using SmartPointerType2 = typename Traits::SmartPointerClass<int>; // error: expected ';' before '<' token
using SmartPointerType3 = Traits::SmartPointerClass<int>; // error: non-template 'SmartPointerClass' used as template
};
Run Code Online (Sandbox Code Playgroud)
但上面的3个选项都不起作用......
这是您的依赖类是模板的那个时代之一,因此template在定义别名时必须使用笨拙的语法:
template <typename Traits>
struct Attribute {
typedef typename Traits::template SmartPointerClass<int> SmartPointerType;
using SmartPointerType2 = typename Traits::template SmartPointerClass<int>;
using SmartPointerType3 = typename Traits::template SmartPointerClass<int>;
};
Run Code Online (Sandbox Code Playgroud)
有关何时需要关键字的说明,请参阅此文档template:
template依赖名称的消歧器
类似地,在模板定义中,除非使用消歧关键字template或除非已将其设置为模板名称,否则不将当前实例化的成员的从属名称视为模板名称
这个StackOverflow Answer还提供了一些很好的背景知识.
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |