gpt4 book ai didi

c++ - 来自命名空间的方法链接

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:39 25 4
gpt4 key购买 nike

很抱歉,如果这个问题引起任何混淆,我正在寻求实现这一点,但不知道处理此类问题的正确方法。

对于我的一个项目,我想实现方法链。我想合并以下功能:

.toVector()
.toArray()
.toBool()
...

我考虑过将它们放在命名空间中,例如:

namespace Misc {
template<typename T, typename Inverse>

vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}

// ...
// ...
}

这是因为可能有多个类,这些类可能会使用这些功能,因此,它必须是面向对象的,而不是在不同的类中一次又一次地实现每个功能。

假设我有以下类(class) Wav它读取包含在 wav 文件中的数据:

class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};

data被显式存储为类内部的 vector 。

在我的主要任务中,我希望能够执行以下操作:

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 中放入什么?的 process为了接受以下内容:

int* data = process(toArray<int>(
std::begin(vals),
std::end(vals)
);

这是我最困惑的事情?

最佳答案

关于您的新功能:

为了能够调用下面的process方法

int* data = process(toArray<int>( vals.begin(), vals.end()) );

process 方法的参数应该匹配 toArray 方法的返回类型。也许您也可以将流程方法模板化,如下所示。

template<typename T>
T* process(T* t)
{
//more code here
return t;
}

如上添加 process 方法后,对 process 的调用将编译,但您必须使 process 方法的实现足够通用,以处理来自其他方法(如 toArray)的不同返回类型。

关于c++ - 来自命名空间的方法链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com