正在升级指向valarray的原始指针

Promoting a raw pointer to valarray

本文关键字:valarray 原始 指针      更新时间:2023-10-16

我正在开发一个具有C接口的库,用于兼容

void interface(double* context, size_t num_elements);

context指向存储num_elements double s的原始内存。在代码的剩余部分中,是否有任何策略可以构建一个std::valarray,在库调用结束后临时管理context而不释放它?

您不能创建一个简单的容器来满足您的需求吗?这里有一个我没有测试的小例子:

template <class T>
class custom_valarray
{
public:
    // Ctor/dtor
    custom_valarray() { clear(); }
    ~custom_valarray() { clear(); }
    custom_valarray( T *ptr, const unsigned &s ) { set(ptr,s); }
    // Clear container
    void clear() { data = nullptr; size = 0; }
    // Set data
    void set( T *ptr, const unsigned &s ) { data = ptr; size = s; }
    // Test if container is set
    operator bool() const { return data; }
    bool empty() const { return data; }
    // Accessors
    T* data() { return data; }
    T& operator[] ( const unsigned &i ) 
    { 
        static T garbage;
        return i < size ? data[i] : garbage; 
    }
    // Iterators
    T* begin() { return data; }
    T* end() { return data+size; }
private:
    T *data;
    unsigned size;
};