我有麻煩來實現下面的代碼實現方法與裁判預選賽
template <class T>
struct Foo
{
std::vector<T> vec;
std::vector<T> getVector() && {
// fill vector if empty
// and some other work
return std::move(vec);
}
std::vector<T> getVectorAndMore() &&
{
// do some more work
//return getVector(); // not compile
return std::move(*this).getVector(); // seems wrong to me
}
};
int main()
{
Foo<int> foo;
auto vec = std::move(foo).getVectorAndMore();
}
的問題是,我不能叫getVector
內getVectorAndMore
因爲this
不是右值。爲了編譯代碼,我必須投入this
。
是否有很好的方法來實現這樣的代碼?
與return getVector();
錯誤消息是
main.cpp:17:16: error: cannot initialize object parameter of type 'Foo<int>' with an expression of type 'Foo<int>'
return getVector(); // not compile
^~~~~~~~~
main.cpp:26:31: note: in instantiation of member function 'Foo<int>::getVectorAndMore' requested here
auto vec = std::move(foo).getVectorAndMore();
^
1 error generated.
順便說一句,此代碼編譯罰款(與'鐺3.4'):http://coliru.stacked-crooked.com/a/911ce206d19eea5c – Nawaz
@Nawaz我的意思是這個版本http://coliru.stacked-crooked.com/a/23aa6a4a4e8d07c4。我知道什麼是錯誤,我知道它爲什麼失敗,我知道如何解決它,我想問一個更好的方法來修復它 –