Заставить класс шаблона получить другой класс как <T>и рассматривать его как тип данных (C ++) - PullRequest
0 голосов
/ 04 июня 2011

Я предполагаю сделать что-то необычное. У меня есть шаблон класса:

template<class T> class CFile

Я хочу создать еще один класс, который будет иметь член типа int,

class foo
{
private:
     int memb;
}

когда я передаю класс "foo" как "" в "CFile", foo должен просто действовать как целое число. Мне нужны идеи, как реализовать это только с внутренней логикой в ​​foo, без изменения CFile (CFile не разрешается содержать какую-либо логику, которая извлекает член int из класса).

Это для задания в колледже, поэтому я не должен менять данные мне правила. Это должно выглядеть так:

class foo
{
    int memb;
}

int main()
{
  foo myFoo;

  // The ctor of CFile takes a file path and opens the file. After that it can write 
  // members from type < T > to the file. I need the CFile to write the memb member to
  // the file (Remember that the CFile is passed as < T >

  CFile<foo> file("c:\\file.txt");

}

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Я думаю, что вы пытаетесь сделать, чтобы class foo действовал как целое число. Для этого эффекта необходимо предоставить:

  • Конструктор, который может создать foo из int.
  • Перегруженный оператор приведения, который неявно приводит ваш класс foo к int.

У вас будет что-то вроде этого:

class foo {
public:
  foo() {} // Create a foo without initializing it
  foo(const int &memb): _memb(memb) {} // Create and initialize a foo

  operator int&() {return _memb;} // If foo is not constant
  operator const int&() const {return _memb;} // If foo is constant

private:
  int _memb;
};
0 голосов
/ 04 июня 2011

Если CFile использует потоки для записи в файл, вам нужно только реализовать operator << в классе Foo. </p>

Что-то вроде:

ofstream file;

file.open("file.txt"); //open a file

file<<T; //write to it

file.close(); //close it

в CFile, и это добавлено в Foo:

ofstream &operator<<(ofstream &stream, Foo& foo)
{
  stream << foo.memb;

  return stream; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...