【发布时间】:2013-12-14 14:37:10
【问题描述】:
假设我有一个模板:
template<typename T>
struct Foo {int f1, f2;};
我想为它创建一个新别名。
// This will not work, don't even try:
// using Foo = Bar;
// Instead do like this:
template<typename T>
using Bar = Foo<T>;
哇。它似乎工作。首先。 但是……如果我有这样的功能:
// Generic f:
template<template<typename> class Tpl>
void f() {std::cout<<"Generic f"<<std::endl;}
// Specialization of f for Foo:
template<> void f<Foo>() {std::cout<<"f<Foo>"<<std::endl;}
int main() {...; f<Bar>(); ...} //outputs "Generic f"
看来 f
所以:
- 这是 GCC 4.8 错误,还是 C++11 标准设计缺陷,还是预期如此?
- 有没有办法在 C++11 中创建“真正的”模板别名?在 C++14 中? C++17?
谢谢。
【问题讨论】:
-
你的意思是 f
> 和 f ? -
@polkadotcadaver,当然不是。
-
只说不,不要轻视。
-
您在这里缺少
class:template<template<typename> Tpl> -
也许你可以说别名模板是别名的模板,而不是模板的别名。
标签: templates c++11 alias using