0
すべて、私はr値、l値、および「スコットマイヤー」が「ユニバーサルリファレンス」と呼ぶものを理解して遊んでいます。私は私の例を設定するのにいくつかの問題を抱えています。誰かが何かガイダンスを提供できますか?移動コンストラクタ「非クラス型」に不満
#include <cstdio>
namespace who_needs_namespaces {
class SomeSillyClass {
public:
SomeSillyClass() {
printf("Default constructed.\n");
}
SomeSillyClass(const SomeSillyClass& rhs) {
printf("L-Value constructed.\n");
}
SomeSillyClass(SomeSillyClass&& rhs) {
printf("R-Value Constructed.\n");
}
void doStuff() const {
printf("doing...\n");
}
};
template<typename T>
class HolderByValue {
public:
HolderByValue() = delete;
HolderByValue(T toHold) : m_mine(toHold)
{ };
private:
T m_mine;
};
template<typename T>
class HolderByRef {
public:
HolderByRef() = delete;
HolderByRef(T&& toHold) : m_mine(toHold)
{ };
private:
T m_mine;
};
}
using namespace who_needs_namespaces;
int main() {
//Check our silly class.
SomeSillyClass defaultCtr;
defaultCtr.doStuff();
SomeSillyClass copyCtr(defaultCtr);
copyCtr.doStuff();
SomeSillyClass moveCtr(SomeSillyClass);
moveCtr.doStuff();
//Check our HolderByValue
//HolderByValue<SomeSillyClass> holder(defaultCtr);
HolderByValue<SomeSillyClass &> holder(defaultCtr);
}
main.cpp: In function 'int main()':
main.cpp:59:13: error: request for member 'doStuff' in 'moveCtr', which is of non-class type 'who_needs_namespaces::SomeSillyClass(who_needs_namespaces::SomeSillyClass)'
'SomeSillyClass moveCtr(SomeSillyClass);で何をしようとしていますか?コンストラクタに型を渡しますか?関数を宣言する...私はコンパイラが後者を考えると思う。 – doctorlove
'SomeSillyClass moveCtr(SomeSillyClass()));' – doctorlove