抱歉,如果这个问题引起任何混淆,我正在寻求实现这一点并且不知道处理这种事情的正确方法。
对于我的一个项目,我想实现方法链接。我想合并以下功能:
.toVector()
.toArray()
.toBool()
...
我考虑过将它们放在命名空间中,例如:
namespace Misc {
template<typename T, typename Inverse>
vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}
// ...
// ...
}
这是因为可能有多个类,这些类可能能够使用这些功能,因此,它必须是面向对象的,而不是在不同的类中一次又一次地实现每个功能。
假设我有以下类Wav
,它读取 wav 文件中包含的数据:
class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};
data
被显式存储为类内部的向量。
在我的主要我希望能够做到以下几点:
int main()
{
Wav wave("file.wav");
int* data = wave.getWaveData().toArray(); // Method chaining to store as an array
}
我不知道这是否可行,如果可行,我将如何在不Misc
一遍又一遍地在每个类中实现所有功能的情况下解决这个问题。有没有一种方法可以在命名空间和类之间进行通信,而不必一遍又一遍地包含所有功能?
我希望有人有一个建议和任何我会尝试回答的问题。
编辑:
我编写了以下功能:
template<typename T, typename Inverse>
T* toArray(Inverse begin, Inverse end)
{
size_t size = distance(begin, end);
auto pos = 0;
T* tmp = new T[size];
for(auto i = begin; i != end; i++)
{
tmp[pos] = *i;
pos++;
}
return tmp;
}
如果我有另一个功能:
void process()
{
}
因此,我需要在params
ofprocess
中放入什么才能接受以下内容:
int* data = process(toArray<int>(
std::begin(vals),
std::end(vals)
);
这是最让我困惑的事情吗?