【发布时间】:2021-05-03 18:26:42
【问题描述】:
我想定义一个类模板(以下称为C),它将对要实例化的类模板(以下称为S)的对象的引用作为模板参数。目标是 C 可以用一个模板参数完全实例化。
S 本身就是一个类模板,它有一个整型模板参数。 C 类模板应使用对S 任何实例化对象的引用来实例化。
这就是我想要达到的目标:
template<int I> struct S {
int get() { return 42 + I; }
};
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ my desperate attempt
template< typename S<int I>::template & n>
struct C {
int get() {
return n.get();
}
};
S<42> s;
int main()
{
C<s> c;
return c.get();
}
我使用的编译器支持 GNU++11 或更早版本。
【问题讨论】:
-
@PatrickRoberts 仅当参数不是引用时才会如此(无论如何,这在 C++20 之前不起作用)。
-
这在 C++11 中看起来不可行。在 C++17 中会很简单。
-
@HolyBlackCat 提到的 C++17 的简单性:
template<auto &n> struct C {...}; -
被旧版本的语言标准卡住真是糟透了。 ????
-
@PatrickRoberts 不会,只要参数不是 const 引用。