互換性のために C インターフェイスを持つライブラリを開発しています
void interface(double* context, size_t num_elements);
whileは、scontext
を格納する生のメモリを指しnum_elements
double
ます。コードの残りの部分で、ライブラリ呼び出しが終わった後に解放せずstd::valarray
に一時的に管理するを構築する戦略はありますか?context
互換性のために C インターフェイスを持つライブラリを開発しています
void interface(double* context, size_t num_elements);
whileは、scontext
を格納する生のメモリを指しnum_elements
double
ます。コードの残りの部分で、ライブラリ呼び出しが終わった後に解放せず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;
};