POD и шаблоны - PullRequest
       2

POD и шаблоны

4 голосов
/ 27 августа 2011

это POD?

template <class T>
struct Data {
  float val_f; 
  T val_t;    
  int val_i;  
};

Если у меня есть функция C, которая требует что-то вроде:

struct Data {
  float val_f; 
  double val_t;    
  int val_i;  
};

Могу ли я вместо этого передать Data<double> объект?

Ps. Я предполагаю, что ответ - да, поскольку во время компиляции Data<dobule> будет переведено в структуру выше и будет структурой POD Мне нужно только и (информированное) подтверждение об этом.

Ответы [ 2 ]

14 голосов
/ 27 августа 2011

В ответ на первый вопрос это зависит от параметра шаблона T. Data<T> будет POD, если T - POD.

В ответ на ваш второй вопрос классы с одинаковыми определениями не являются идентичными типами, поэтому вы не можете использовать их взаимозаменяемо. Data<double> в первом примере будет отличаться от Data во втором определении. (В любом случае, чтобы они были в одной программе, вам нужно было бы дать им разные имена. У вас не может быть шаблона с таким же именем, как у класса.)

3 голосов
/ 27 августа 2011

Это зависит от типа, который вы передаете, как T. Если вы создаете экземпляр типа POD, тогда да.

Если у вас есть доступ к c++0x или Boost, вы сможете проверить с помощью черты std::is_pod<mytype>.

Надеюсь, это поможет.

...