好的,我之前关于模板的问题的更新(我在这个领域是个通奸)...... 我恢复了大部分问题: 是否可以为成员函数设置不同的参数计数,具体取决于类声明中使用的模板参数?
例如,构造函数:
template <typename Type, unsigned ElementCount>
class TVector
{
public:
Type Values[ElementCount];
TVector ( ElementCount number of Type here )
{ ...
这可能吗? 或者也许是一个二传手:
SetValues ( ElementCount number of Type here );
编辑: 好吧,我的错误,我没有完全解释。 此向量是三角矢量,而不是元素数组。因此,它应该支持2,3或4个值。
至于构造函数,我希望能够做类似的事情: TVector xpto(0.0f,0.0f,0.0f,1.0f);
至于编译器,我正在使用gcc,并且如果可以安全地启用更新的c ++标准,那就是dunno。当我启用它时,它会抱怨它。所以,对我来说没有enable_if:)
感谢。
答案 0 :(得分:0)
成员函数可以具有std::initializer_list<T>
类型的参数,允许它访问任意数量的const T类型的对象。在这种情况下,类模板中的ElemCount可以被删除,因为您不需要必须指定参数的数量。
template <typename Type>
class TVector
{
public:
TVector ( std::initializer_list<Type> l )
{ ...
答案 1 :(得分:0)
是的,您可以使用std::enable_if
。
template <typename T, typename ... Ts>
struct AllSameAsT : public std::false_type
{
};
template <typename T>
struct AllSameAsT<T> : public std::true_type
{
};
template <typename T, typename T, typename ... Ts>
struct AllSameAsT : public AllSameAsT<T, Ts...>
{
};
template <typename Type, unsigned ElementCount>
class TVector
{
public:
template <typename ... Ts, typename = std::enable_if_t<AllSameAsT<Type, Ts...>::value && (sizeof...(Ts) == ElementCount)>
TVector (Ts... ts);
};
如果你没有C ++ 14,你还需要添加
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
正如JosephMansfield在评论中指出的那样,一个更简单的解决方案可能就是接受std::array<Type, ElementCount>
。