Я бы заполнил 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)