C++11的结合函数可以用于std(甚至更好的mtl)载体吗?

Can C++11's bind-functions be used in an std (or even better an mtl) vector?

本文关键字:mtl 更好 函数 结合 用于 C++11 std      更新时间:2023-10-16

我正在尝试将不同的随机变量(问题是,它们不是变量,而是函数(保存到向量中:

auto dW0 = std::bind(std::normal_distribution<double>{0.0, 1}, std::default_random_engine{123456});
auto dW1 = std::bind(std::normal_distribution<double>{0.0, 1}, std::default_random_engine{123456+1000});
std::vector<decltype(dW0)> dW = {dW0, dW1};

如果我能将它们保存到 mtl-vector,那就更好了:

mtl::dense_vector<decltype(dW0)> dW = {dW0, dW1};

但是将它们保存到标准载体会有很大帮助。

bind的结果类型可以存储在vector中,因为C++11 20.8.9.1.2指定它是MoveConstructible的(如果绑定函子和参数是,也可以CopyConstructible(。

但请注意,当绑定不同的函子和参数类型时,bind的结果类型会有所不同;并且向量中的所有对象必须具有相同的类型。在您的示例中,这很好;但是,如果您需要更大的灵活性(例如不同的发行版或引擎(,则需要存储更通用的函子类型,例如std::function

我不熟悉mtl::dense_vector,但希望它对std::vector有兼容的要求,在这种情况下也应该没问题。