Eğer bu soru herhangi bir karışıklığa neden oluyorsa özür dilerim, bunu uygulamaya çalışıyorum ve böyle bir şeye yaklaşmanın doğru yolunu bilmiyorum.İsim uzayından zincirleme
Projelerimden birinde yöntem zincirleme uygulamak istiyorum. Ben aşağıdaki işlevleri dahil etmek istiyorum:
.toVector()
.toArray()
.toBool()
...
Ben bir isim alanı içinde bu yerleştirerek düşündüm mesela:
namespace Misc {
template<typename T, typename Inverse>
vector<T> toVector(Inverse begin, Inverser end) {
// ...
// ..
}
// ...
// ...
}
Bu çoklu sınıfları olabilir, çünkü bu sınıflar kullanabilecektir OLABİLİR olduğunu Bu nedenle, bu işlevler, her bir işlevi farklı sınıflarda tekrar tekrar uygulamak yerine, OO olmalıdır.
class Wav {
public:
Wav();
Wav(string theFileName);
void getWaveData();
protected:
vector<double> data;
};
data
açıkça sınıfın içinde bir vektörü olarak depolanır:
ı bir wav dosyasında bulunan verileri okur aşağıdaki sınıf Wav
var diyelim.
int main()
{
Wav wave("file.wav");
int* data = wave.getWaveData().toArray(); // Method chaining to store as an array
}
bu mümkün olacağını olup olmadığını bilmiyorum ve eğer öyleyse ben Misc
fonksiyonların hepsi uygulamadan bu yaklaşım nasıl: Benim ana olarak
Umarım birisinin bir öneri ve cevaplamaya çalışacağım sorular vardır.
DÜZENLEME:
Ben yazılı aşağıdaki fonksiyonu:
void process()
{
}
Dolayısıyla ben bu params
içine koymak gerekir Ne:
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;
}
Ve başka bir fonksiyon varsa Aşağıdakileri kabul etmek için process
:
int* data = process(toArray<int>( std::begin(vals), std::end(vals) );
En çok kafa karıştırıcı olan şey bu mu? Yeni işlevi ile ilgili olarak
Neden yöntem zincirleme olmalı? Eğer (potansiyel olarak iç içe) işlev çağrıları amaçladıysanız, bu önemsiz olacaktır. – delnan
@delnan Lütfen ne demek istediğine bir örnek verebilir misiniz? Wave.getWaveData(). ToArray(). ToBool() 'yerine" – Phorce
"toBool (toArray (wave.getWaveData())). – delnan