我正在寻找一个提供容器的库,例如std::array
(编译时固定大小,但不支持聚合初始化)和std::vector
(可变大小,连续内存),这些容器适用于不可复制且不可默认构造的类型。
具体来说,我希望能够将一组函数传递给构造函数,这些函数用于获取包含对象的构造函数的参数。类似的东西emplace_back
,但作为构造函数并使用延迟评估的参数。
这是一个(自然不工作)示例:
class stubborn_type : boost::noncopyable {
public:
explicit stubborn_type(int value)
: value(value)
{}
private:
const int value;
};
struct generate_values {
generate_values(int initial_value = 0)
: current_value(initial_value)
{}
int operator()() {
return current_value++;
}
private:
int current_value;
};
/* This should create a vector containing 10 elements initialized with the values
[0..9] in order. */
magic::vector<stubborn_type> data(10, generate_values());
我需要 to 解决方案与 C++03 兼容(因为这意味着没有可变参数模板,我更喜欢使用预处理器魔术为不同数量的参数生成重载的 Boost 方法,但合理的固定限制也可以)。这样的事情存在吗?如果没有,是否有任何库可以帮助实现该目标(例如,Boost.In Place Factory几乎很有用,但它不支持惰性参数)。