如何制作set <T>(args ...)方法?

use*_*020 2 c++ templates c++11 c++14

例如,我有一个班级

class A
{
public:
    template<class T, class... Args>
    void set(Args&&... args);

private:
    std::shared_ptr<Member1Type> m_member1;
    std::shared_ptr<Member2Type> m_member2; // Member types are all different.
};
Run Code Online (Sandbox Code Playgroud)

我希望我能用它

A a;
a.set<Member1Type>(args... to construct Member1Type);
Run Code Online (Sandbox Code Playgroud)

喜欢的

make_shared<T>(args...);
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在实现该方法时将成员类型链接到正确的成员.谢谢!

MSa*_*ers 7

我会std::tuple<MemberType1*, MemberType2*, ...>在ctor中填充一个,这样你就可以使用get<T*>(m_tuple)A::set<T, Args...>

[编辑]或者像StoryTeller建议的那样,没有额外的成员:

private:
    std::tuple <
        std::shared_ptr<Member1Type>,
        std::shared_ptr<Member2Type>
    > m_members;
Run Code Online (Sandbox Code Playgroud)

你现在需要 std::get<std::shared_ptr<T>>(m_members)