来自命名空间的方法链接
Method chaining from namespace
很抱歉,如果这个问题引起了任何困惑,我正在寻求实现它,但不知道如何正确处理这样的事情。
对于我的一个项目,我想实现方法链接。我想合并以下功能:
.toVector()
.toArray()
.toBool()
...
我曾考虑过将这些放在一个命名空间中,例如:
namespace Misc {
template<typename T, typename Inverse>
vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}
// ...
// ...
}
这是因为可能有多个类,这些类可能能够使用这些函数,因此,它必须是OO,而不是在不同的类中一次又一次地实现每个函数。
假设我有以下类Wav
,它读取wav文件中包含的数据:
class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};
CCD_ 2被显式地存储为类内部的向量。
总的来说,我希望能够做到以下几点:
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()
{
}
因此,我需要在process
的params
中放入什么才能接受以下内容:
int* data = process(toArray<int>(
std::begin(vals),
std::end(vals)
);
这是最让我困惑的事情吗?
关于您的新功能:
为了能够调用下面的处理方法
int* data = process(toArray<int>( vals.begin(), vals.end()) );
process方法的参数应该与toArray方法的返回类型匹配。也许您也可以将流程方法模板化,如下所示。
template<typename T>
T* process(T* t)
{
//more code here
return t;
}
如上所述添加流程方法后,对流程的调用将进行编译,但您必须使流程方法的实现足够通用,以处理与toArray等其他方法不同的返回类型。
相关文章:
- 使用类模板的方法链接错误
- 为什么调用没有正文的纯虚拟方法不会导致链接器错误?
- 在使用库时,找到要链接的必要库的快速方法是什么
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 将多个效果与 libSox 链接并读取输出数据的正确方法
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 从方法链接中使用的临时移动
- 使用 CMake 的静态方法链接错误
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误
- 返回值上的 C++ 方法链接不起作用
- 方法链接中的C++执行顺序
- 将错误与静态方法链接
- 具有多态性 C++ 的方法链接
- 构造函数上的C++方法链接
- 重新加载了序列点和方法链接
- 来自命名空间的方法链接
- 方法链接导致编译错误
- 方法链接的缩进
- 垃圾回收如何处理这些由方法链接创建的静态实例
- 将内联非成员操作符的声明和定义分开的正确方法(链接器问题)