我希望一个类有一个带有模板参数的函数,并基于该模板参数操作一个特定的成员变量。
例如,如果允许函数模板特化,则如下所示:
struct A
{
struct M1 {};
struct M2 {};
// Function template specialization not allowed :(
template<typename M>
void addM(M const &m);
template<>
void addM(M1 const &m)
{
m1_vec_.push_back(m);
}
template<>
void addM(M2 const &m)
{
m2_vec_.push_back(m);
}
std::vector<M1> m1_vec_;
std::vector<M2> m2_vec_;
};
有什么想法吗?我觉得我缺少一些简单的东西,但又不能完全理解它。
最佳答案
只是让它们重载:
struct A
{
struct M1 {};
struct M2 {};
void addM(M1 const &m)
{
m1_vec_.push_back(m);
}
void addM(M2 const &m)
{
m2_vec_.push_back(m);
}
std::vector<M1> m1_vec_;
std::vector<M2> m2_vec_;
};
如果你不想重复addM
的代码,你可以抽象出另一个函数后面的 vector 选择:
struct A
{
struct M1 {};
struct M2 {};
template <class T>
void addM(T const &m)
{
getVec<T>().push_back(m);
}
std::vector<M1> m1_vec_;
std::vector<M2> m2_vec_;
private:
template<class T>
std::vector<T> &getVec();
};
template <>
std::vector<A::M1> &A::getVec() { return m1_vec_; }
template <>
std::vector<A::M2> &A::getVec() { return m2_vec_; }
关于c++ - C++ 模板函数可以选择成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228315/