죄송합니다.이 질문으로 인해 혼란이 생길 경우이를 구현하려고하고 있는데 그런 일에 접근하는 올바른 방법을 모릅니다.네임 스페이스에서 메서드 체이닝
내 프로젝트 중 하나의 경우 메소드 체인을 구현하고 싶습니다. 나는 다음과 같은 기능을 통합하려는 :
.toVector()
.toArray()
.toBool()
...
내가 네임 스페이스 내에서 이러한 배치에 대한 생각을 예 :
namespace Misc {
template<typename T, typename Inverse>
vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}
// ...
// ...
}
이 여러 클래스가있을 수 있기 때문에, 이러한 클래스를 사용 할 수있을 것입니다 따라서 이러한 함수는 다른 클래스에서 각 함수를 반복해서 구현하는 것이 아니라 객체 지향적이어야합니다.
class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};
data
명시 적으로 클래스의 내부 벡터로 저장됩니다
의 내가 WAV 파일에 포함 된 데이터를 읽고 다음 클래스 Wav
있다고 가정 해 봅시다.
int main()
{
Wav wave("file.wav");
int* data = wave.getWaveData().toArray(); // Method chaining to store as an array
}
나는이 가능할 것이다 여부를 모르는 그렇다면 것은 내가 Misc
의 모든 기능을 구현하지 않고 접근 할 방법 : 내 주에서
누군가에게 제안을하고 그에 대한 답변을 드리겠습니다.
편집 :
나는이 기록 된 다음과 같은 기능 :
void process()
{
}
I 따라서의 params
안에 넣을 필요가 무엇 :
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;
}
그리고 또 다른 기능이있는 경우 process
을 수락하려면 다음을 수락하십시오.
int* data = process(toArray<int>( std::begin(vals), std::end(vals) );
이것은 나를 가장 혼란스럽게하는 것입니까? 새로운 기능에 관한
왜 메소드 체이닝을 수행해야합니까? 당신이 (잠재적으로 중첩 된) 함수 호출을 목표로한다면, 그것은 사소할 것이다. – delnan
@delnan 무슨 뜻인지 말씀해 주시겠습니까? (Wave.getWaveData(). toArray(). toBool()'대신에 – Phorce
'toBool (toArray (wave.getWaveData())) – delnan