抱歉,标题令人困惑...我想做的是:
template<typename T, typename... Ts>
struct Foo {
??? template<bool Bool> friend Foo<Ts...>::Bar<Bool> ???
private:
Foo() {}
public:
template<bool Bool>
struct Bar {
Foo<Ts...> foo(){return Foo<Ts...>{};}
};
};
例如,对于任何T和Bool,Foo<int, int>
只能从Foo<T, int, int>::Bar<Bool>
构造。
我尝试使用模板别名,这个别名看起来最接近工作:
template<typename R, bool Bool>
using parent_bar = typename Foo<R, T, Ts...>::template Bar<Bool>;
template<typename R, bool Bool>
friend class parent_bar;
看来这根本不可能,我只想确认一下。尽管Bjarne Stroustrup声称p位居首。 C ++语言第4版的684,“几乎可以肯定的是,复杂的友谊模式肯定是设计错误”,我有很好的理由使用它。