想象一下我有
struct A {
template <class T>
T getFirstElement();
vector<float> floatVector;
vector<int> intVector;
};
在实施文件中:
template <>
float A::getFirstElement<float>() {
return floatVector[0];
}
template <>
int A::getFirstElement<int>() {
return intVector[0];
}
因为我知道我的成员变量的类型,甚至命名它们似乎有点过分。有没有办法让一些东西(比如一个类型列表)在编译时说明这个结构的成员是什么?希望有更简洁的内容,没有明确的模板专业化。
答案 0 :(得分:4)
使用std::tuple
你可以
struct A {
template <class T>
T getFirstElement() const
{
return std::get<std::vector<T>>(Vectors)[0];
}
std::tuple<std::vector<float>, std::vector<int>> Vectors;
};
使用可变参数模板:
template <typename ... Ts>
struct A_impl {
template <class T>
T getFirstElement() const
{
return std::get<std::vector<T>>(Vectors)[0];
}
std::tuple<std::vector<Ts>...> Vectors;
};
struct A : A_impl<float, int> {};
答案 1 :(得分:1)
你可以这样写:
#include <vector>
template<typename T>
struct VectorProvider
{
std::vector<T> vector;
auto& get() {
return vector;
}
};
struct A
: VectorProvider<float>, VectorProvider<int> {
template <typename T>
T getFirstElement() {
return VectorProvider<T>::get()[0];
}
};