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

Существует много свойств на StringComparer статический класс, которые возвращают компараторы для любого типа чувствительности к регистру, которую Вы могли бы хотеть:

StringComparer Свойства

, Например, можно звонить

StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)

, или

StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)

Это немного более чисто, чем string.Equals или string.Compare перегрузки, которые берут StringComparison аргумент.

7
задан Dan Hook 26 August 2009 в 19:21
поделиться

3 ответа

Если Stuff :: some_member равно int и Object имеет неявный ctor, принимающий int , это должно работать :

list<Stuff> a;   
list<Object> objs;
transform(a.begin(),a.end(),back_inserter(objs), 
  boost::bind(&Stuff::some_member,_1)
);

В противном случае вы могли бы использовать boost :: lambda :: constructor

5
ответ дан 6 December 2019 в 10:02
поделиться

Ссылка Эрика частично говорит: «Невозможно получить адрес конструктора, поэтому конструкторы не могут использоваться в качестве целевых функций в выражениях связывания». Так что то, что я пытался сделать, было невозможно.

Я обошел это, создав функцию:

Object Object_factory(int n)
{  return Object(n); }

и используя Object_factory, где я пытался использовать конструктор Object.

3
ответ дан 6 December 2019 в 10:02
поделиться

Это зависит от того, что a :: some_member возвращает - если это Объект , то вам не нужно чтобы обернуть результат в объект ctor - он уже будет создан. Если подпрограмма не возвращает объект , вам, вероятно, придется немного обработать результат, что вы можете получить с помощью boost :: bind , но служебная функция может сделайте код более читабельным.

В любом случае поможет дополнительный код, в частности экземпляр типа a и Object .

0
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: