考虑下面的代码模板,定义了一个别名模板来作为模板的模板参数进行传递:传递别名模板基类这取决于
template<template<class T> class SomeFoo>
class Base {};
template<class T, class Bar>
class Foo {};
class Bar;
template<class T>
using BarFoo = Foo<T, Bar>;
class Bar : public Base<BarFoo> {};
可正常工作。但是,如果Bar
本身是模板,则此解决方案不可行,因为别名模板取决于Bar
的具体实例。在Bar
中定义别名模板也没有帮助,因为在给出基类时它还不可用。因为它似乎没有可以定义“对飞”在参数列表中的别名模板,唯一的工作,我身边能想出是通过Bar
到Base
和定义别名模板有:
template<template<class T, class Derived> class SomeFooTL, class Derived>
class Base
{
template<class T>
using SomeFoo = SomeFooTL<T, Derived>;
};
template<class T, class Bar>
class Foo {};
template<class S>
class Bar : public Base<Foo, Bar<S>> {};
然而,这是非常不令人满意的,因为可能有(并且)其他Foo
的除了T
之外不依赖任何东西,现在被迫采取不必要的第二模板参数。
有没有人知道更好的方法来实现这一目标?
不知道我明白了,但是不能通过一个你有模板的类<...> using type = ...;而不是传递一个模板? – lorro
@lorro我想我明白你在做什么,我不得不认为通过...(顺便提一下,关于这个问题有什么不清楚的地方?也许我可以重新翻译它。)编辑:是的,我认为这应该工作!让它成为正确的答案,我会接受它。 – Knoep