способ не принимать имена для объектов, которые используются только для создания конечного объекта - PullRequest
0 голосов
/ 14 июля 2010

Предположим, у нас есть два следующих класса:

class Temp{
 public:
  char a;
  char b;
};
class Final{
 private:
  int a;
  char b;
  char c;
 public:
  Final(Temp in):b(in.a),c(in.b){}
  //rest of implementation
};

Предположим, что единственное использование объектов класса Temp - это создание объектов класса Final, поэтому мне интересно, можем ли мы в текущем стандарте c ++ использоватьмакрос или как-то сказать компилятору, так как этот объект класса Temp, который я определяю, используется только в одной строке кода и является аргументом конструктора класса Final;взять себе имя для него, чтобы я не потрудился взять одно имя для каждого объекта класса Temp?

Ответы [ 3 ]

3 голосов
/ 14 июля 2010

Ну, это не единственное место, где используется Temp, потому что вы должны создать объект Temp при вызове конструктора, верно?

Что касается «захвата имен», вы можете использовать вложенный класс:

class Final 
{
public:
    struct ConstructorParameter { char a, b; };

    Final(const ConstructorParameter& in) { ... };
};

Или, конечно, вы можете просто создать конструктор с двумя параметрами:

class Final
{
public:
    Final(char a, char b) { ... };
};
1 голос
/ 14 июля 2010

Если это просто два подобъекта, используйте std::pair<char,char>.

Если в вашем фактическом коде их больше, используйте кортеж (либо std::tuple, либо std::tr1::tuple, либо boost::tuple.)

.
0 голосов
/ 16 июля 2010

в текущем стандарте c ++ нет такой вещи, которую я хочу, но в следующем стандарте c ++ 0x для инициализации объекта класса Final мы можем написать:

Final obj({'a','b'}); 

Так что нет именования дляобъект инициализатора класса Temp !!!

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