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

标签 c++ c++11 templates 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.
};

我希望我可以把它当作

A a;
a.set<Member1Type>(args... to construct Member1Type);

喜欢

make_shared<T>(args...);

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

最佳答案

我会填充 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;

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

关于c++ - 如何制作 set<T>(args...) 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53322393/

相关文章:

c++ - 错误 C2440 : '=' : cannot convert from 'Node<ValueType> *' to 'Node<ValueType> *'

c++ - 为类型列表创建别名并将其作为模板参数传递

c++ - 是否有原因 declval 返回 add_rvalue_reference 而不是 add_lvalue_reference

c++ - 使用带有宏的 decltype 显式实例化类成员函数

c++ - 如何选择带有类型参数的成员变量?

C++ 提高文本文件中字符串 vector 的精度

c++ - C++ 头文件中的大小写敏感性

c++ - this 指针作为指向对象的指针

c++ - 将 unique_ptr 的 vector 传递给对象。 vector 成为成员变量。正确的做法?

c++ - 有没有办法限制模板类?