সি ++ টেম্পলেট টাইপডেফ


368

আমার একটা ক্লাস আছে

template<size_t N, size_t M>
class Matrix {
    // ....
};

আমি এমন একটি typedefতৈরি করতে চাই যা একটি Vector(কলাম ভেক্টর) তৈরি করে যা Matrixআকার এন এবং 1 এর সমান is

typedef Matrix<N,1> Vector<N>;

যা সংকলন ত্রুটি উত্পাদন করে। নিম্নলিখিতটি অনুরূপ কিছু তৈরি করে, তবে আমি যা চাই ঠিক তা নয়:

template <size_t N>
class Vector: public Matrix<N,1>
{ };

এর জন্য কী কোনও সমাধান বা খুব ব্যয়বহুল কাজ / সর্বোত্তম অনুশীলন নয়?

উত্তর:


548

সি ++ 11 যুক্ত করা উলামের ঘোষণা , যা সাধারণকরণ typedef, টেমপ্লেটগুলিকে অনুমতি দেয়:

template <size_t N>
using Vector = Matrix<N, 1>;

প্রকারটি Vector<3>সমান Matrix<3, 1>


সি ++ তে, সর্বাধিক নিকটবর্তীটি ছিল:

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};

এখানে, টাইপ Vector<3>::typeসমান Matrix<3, 1>


45
ওহ দুর্দান্ত, আমি সি ++ 0x এর এই অংশটি দেখিনি এবং আমি কিছুক্ষণের জন্য টেম্প্লেটেড টাইপডেফ সম্পর্কে জড়িয়ে পড়ছি ... অনুমান করি চূড়ান্ত খসড়াটি সম্পর্কে আমার আরও বিশদ পাঠ করা উচিত।
ম্যাথিউ এম।

2
উত্তরাধিকারী নির্মাণকারীরা কি ওপির মূল সমাধানটিকে আরও কার্যকর সমাধান করতে সক্ষম করবে?
স্ট্যাকড ক্রুকড

2
@ স্ট্যাকড ক্রুকড: তার লক্ষ্যগুলির উপর নির্ভর করে। আমি যখন উত্তরাধিকার রচনা করি তখন আমি উত্তরাধিকার এড়িয়ে চলি (এবং হ্যাঁ, উত্তরাধিকারী কনস্ট্রাক্টররা এগুলি উভয়ই সহজ করে তুলবে), তবে টাইপয়েফ যখন করবেন তখন আমি রচনাও এড়াতে চাই।
GManNickG

1
আমি ভুল না হলে ব্যবহার বিশেষায়িতাকে সমর্থন করে না তাই দ্বিতীয় বিকল্পটি এখনও অনেক ক্ষেত্রে কার্যকর।
উত্কর্ষ ভরদ্বাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.