Xin lỗi nếu câu hỏi này gây ra bất kỳ sự nhầm lẫn nào, tôi đang tìm cách thực hiện điều này và không biết đúng cách để tiếp cận một điều như vậy.Phương pháp chuỗi từ không gian tên
Đối với một trong các dự án của tôi, tôi muốn triển khai phương pháp chuỗi. Tôi muốn kết hợp các chức năng sau:
.toVector()
.toArray()
.toBool()
...
Tôi đã nghĩ về việc đặt các bên trong một không gian tên, ví dụ:
namespace Misc {
template<typename T, typename Inverse>
vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}
// ...
// ...
}
Đây là bởi vì có thể có nhiều lớp, các lớp này có thể có thể sử dụng các hàm này, do đó, nó phải là OO thay vì thực hiện từng hàm một lần nữa trong các lớp khác nhau.
Hãy nói rằng tôi có lớp sau Wav
mà đọc trong các dữ liệu chứa trong một file wav:
class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};
data
được lưu trữ một cách rõ ràng như một vector bên trong của lớp.
Trong chính của tôi, tôi muốn để có thể làm như sau:
int main()
{
Wav wave("file.wav");
int* data = wave.getWaveData().toArray(); // Method chaining to store as an array
}
Tôi không biết hay không này sẽ có thể và nếu như vậy làm thế nào tôi sẽ tiếp cận này mà không thực hiện tất cả các Misc
chức năng lặp đi lặp lại bên trong mỗi lớp. Có cách nào để giao tiếp giữa không gian tên và lớp mà không phải bao gồm tất cả các hàm lặp đi lặp lại không?
Tôi hy vọng ai đó có đề xuất và bất kỳ câu hỏi nào tôi sẽ cố gắng trả lời.
EDIT:
Tôi có viết hàm sau:
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;
}
Và nếu tôi có chức năng khác:
void process()
{
}
Làm sao tôi do đó cần phải đặt bên trong params
của process
để chấp nhận các điều sau:
int* data = process(toArray<int>( std::begin(vals), std::end(vals) );
Đây là điều khiến tôi khó hiểu nhất?
Tại sao nó phải là phương pháp chuỗi? Nếu bạn nhắm tới các cuộc gọi hàm (có khả năng lồng nhau), nó sẽ là tầm thường. – delnan
@delnan Bạn có thể đưa ra ví dụ về ý của bạn không? – Phorce
'toBool (toArray (wave.getWaveData()))' thay vì 'wave.getWaveData(). ToArray(). ToBool()'. – delnan