使用元函数链接类

时间:2015-10-14 22:34:57

标签: c++ templates c++11 variadic

考虑

class B;  class C;

class A {
    using linked_from = std::tuple<B,C>;  // i.e. A is "linked from" B and C.
};

class B {
    using linked_to = std::tuple<A,C>;  // i.e. B is "linked to" A and C.
};

class C {
    using linked_to = std::tuple<A>;
    using linked_from = std::tuple<B>;
};

我想要做的是重新设计上述内容,以便在更改linked_to成员类型时不需要维护。

可能是一些东西
template <typename To, typename From>
struct LinkFromMap {
    using linked_from = From;
};

template <typename From, typename To>
struct LinkPair : LinkFromMap<To, From> {};

template <typename T, typename... Ts>
struct Link : LinkPair<Ts, T>... {
    using linked_to = std::tuple<Ts...>;
};

class B;  class C;

class A {};

class B : public Link<B, A,C> {};

class C : public Link<C, A> {};

int main() {
    static_assert(std::is_same<B::linked_to, std::tuple<A,C>>::value, "");
    // Still need to obtain std::tuple<B,C> from A,  std::tuple<B> from C, etc...
}

AC不需要保留linked_from成员类型,只要std::tuple<B,C> Astd::tuple<B>可以获得LinkFromMap可以从C获得。这就是我在上面定义LinkFromMap的原因,但我无法弄清楚如何使用<A, B,C>来实现这一点。是否可以在某种程度上使用它来形成包<C,B>linked_from或类似的东西?或者有更好的方法可以自动执行SQL_Latin1_General_CP1_CI_AS设计的类型检索吗?

0 个答案:

没有答案