2

互換性のために C インターフェイスを持つライブラリを開発しています

void interface(double* context, size_t num_elements);

whileは、scontextを格納する生のメモリを指しnum_elements doubleます。コードの残りの部分で、ライブラリ呼び出しが終わった後に解放せずstd::valarrayに一時的に管理するを構築する戦略はありますか?context

4

1 に答える 1

0

ニーズに合わせて簡単なコンテナーを作成できませんでしたか? テストしなかった小さな例を次に示します。

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;
};
于 2013-02-25T22:10:40.533 に答える