不同常规类型的C ++数组

时间:2016-03-18 23:09:43

标签: c++ arrays vector

考虑以下代码:

template<typename T>
void doSomething(std::vector<T> arr) {
    for (auto i = 0; i < arr.size(); ++i)
        std::cout << arr[i] << std::endl;
}

int main()
{
    doSomething(std::vector<int> { 1, 5, 7 });
}

在此示例中,正常使用模板。将三个整数的数组传递给一个函数,该函数具有类型为T的数组的一般类型的参数。然后在此处指定它们的类型为intstd::vector<int> { 1, 5, 7 }

我想要做的是初始化std::vector以包含三种不同的类型。像这样:

doSomething(std::vector<T> { 1, "Hi", 2.7f });

这里没有指定的类型,std::vector不包含整数。有没有办法做这样的事情?谢谢!

2 个答案:

答案 0 :(得分:4)

使用std::vector无法做到这一点。模板参数是唯一的。

检查std::tuple哪能做你想做的事。

std::tuple<int, std::string, float>

如果您需要更多通用性,则必须执行以下操作:

template<typename U, typename V, typename W>
void doSomething(std::tuple<U,V,W> t) { ... }

如果你想要一个具有任意数量元素的元组,那么你必须使用可变参数模板:

template<typename... Ts>
void doSomething(std::tuple<Ts...> data) {
    // ...
}

答案 1 :(得分:0)

不,那不是C ++的工作方式。 C ++是一种静态类型的语言。必须在编译时声明所有变量的类型。

其他语言(如Perl,Python,Javascript等)是动态类型的。对象的类型是在运行时确定的,因此动态类型语言中的等效数组构造可以具有不同类型的值。