c++ - 成员模板的别名模板

标签 c++ c++11 templates c++17 type-alias

假设我有一个模板:

template<typename T>
struct Outer {
    template<typename T1>
    struct Inner {

    };
};

我想要一个别名模板Alias :

template<typename T>
using Alias = Outer<T>::template Inner; // this won't work

using IntOuter = Alias<int>;

所以IntOuter<double>Outer<int>::template Inner<double> 相同.你如何定义Alias ?或者有可能吗?

编辑:

我希望能够创建 SomeOuter在飞行中,因此对于模板 foo:

template<template<typename> class>
struct Foo {
};

Foo<Alias<int>>Foo<Outer<int>::template Inner> 相同

或者做这样的事情:

template<typename T>
using SomeFoo = Foo<Alias<T>>;

最佳答案

你可以

template<typename T, typename T1>
using Alias = typename Outer<T>::template Inner<T1>;

template<typename T1>
using IntOuter = Alias<int, T1>;

或者直接

template<typename T1>
using IntOuter = Outer<int>::Inner<T1>;

然后为 IntOuter<double>你会得到Outer<int>::Inner<double> .

LIVE

关于c++ - 成员模板的别名模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997818/

相关文章:

c++ - 使用八叉树算法进行网格渲染

C++ 抛出异常(需要建议)

c++ - std::transform 顺序保证

c++ - 将 std::async 与模板函数一起使用

c++ - 本地类型作为 C++ 中的模板参数

c++ - 对 void* 指针的常量引用

c++ - 在c++中为什么我们可以重载 `operator ->`而不能重载 `operator .`

c++ - 使变量不可复制的紧凑方法

c++ - "static_cast<To>(from)"当且仅当 "To to{from}"时,或者不是?

c++ - 分配器专门用于 c++14 中的数组类型?