সি ++ 0x ব্যবহারের একটি উদাহরণ দেখায় std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
std::forward
সর্বদা ব্যবহার করা কখন সুবিধাজনক ?
এছাড়াও, এটি &&
পরামিতি ঘোষণায় ব্যবহার করা প্রয়োজন, এটি কি সব ক্ষেত্রেই বৈধ? আমি ভেবেছিলাম যদি কোনও ফাংশনটি দিয়ে এটি ঘোষিত হয় তবে আপনাকে কোনও অস্থায়ী অধ্যায়গুলি পাস &&
করতে হবে, সুতরাং কোনও পরামিতি দিয়ে ফুও বলা যেতে পারে?
সবশেষে, আমার যদি কোনও ফাংশন কল থাকে যেমন:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
পরিবর্তে আমি এটি ব্যবহার করা উচিত:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
এছাড়াও, যদি ফাংশনে দু'বার প্যারামিটারগুলি ব্যবহার করা হয়, অর্থাৎ একই সাথে দুটি ফাংশনে ফরোয়ার্ড করা হয় তবে এটি ব্যবহার করা std::forward
কি বুদ্ধিমানের কাজ ? হবে না std::forward
দুইবার একটি অস্থায়ী একই জিনিস রূপান্তর, মেমরি চলন্ত এবং এটি একটি দ্বিতীয় ব্যবহারের জন্য অবৈধ করতে? নিম্নলিখিত কোডটি কি ঠিক আছে:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
আমি কিছুটা বিভ্রান্ত হয়েছি std::forward
, এবং আমি আনন্দের সাথে কিছু ক্লিয়ারিং ব্যবহার করব।
Args...&& args
?