11
我試着用google搜索這個沒有運氣,所以我在這裏嘗試。C++遞歸嵌套類型和名稱注入
我有幾個類,每個類定義一個成員struct foo
。此成員類型foo
本身可以繼承前一類,因此自己獲得成員類型foo
。
我想用模板元編程(見下文)來訪問嵌套foo
類型,但C++名注射引入的問題,作爲上部foo
類型名稱被注入到下foo
類型,並且當我想上一個得到解決訪問較低的,比如說使用A::foo::foo
。
下面是一個例子:
#include <type_traits>
struct A;
struct B;
struct A {
struct foo;
};
struct B {
struct foo;
};
struct A::foo : B { };
struct B::foo : A { };
// handy c++11 shorthand
template<class T>
using foo = typename T::foo;
static_assert(std::is_same< foo< foo<A> >, foo<B> >::value,
"this should not fail (but it does)");
static_assert(std::is_same< foo< foo<A> >, foo<A> >::value,
"this should fail (but it does not)");
僅供參考,我實施功能衍生物,foo
是微分型。上述情況發生在例如與sin/cos。
TLDR:我如何獲得foo<foo<A>>
爲foo<B>
而不是foo<A>
?
謝謝!
我心中有類似的東西,但那種希望我能避免定義成員基本類型爲每個派生類型... 非常感謝反正! – max
@MaximeTournier正如我所說:如果基地清單是固定的,你可以自動處理它們。面對多重繼承,這變得很奇怪。 – pmr
明白了,但基地的名單是可悲的不固定: -/ – max