Существует много свойств на StringComparer
статический класс, которые возвращают компараторы для любого типа чувствительности к регистру, которую Вы могли бы хотеть:
, Например, можно звонить
StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)
, или
StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)
Это немного более чисто, чем string.Equals
или string.Compare
перегрузки, которые берут StringComparison
аргумент.
Если 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
Ссылка Эрика частично говорит: «Невозможно получить адрес конструктора, поэтому конструкторы не могут использоваться в качестве целевых функций в выражениях связывания». Так что то, что я пытался сделать, было невозможно.
Я обошел это, создав функцию:
Object Object_factory(int n)
{ return Object(n); }
и используя Object_factory, где я пытался использовать конструктор Object.
Это зависит от того, что a :: some_member
возвращает - если это Объект
, то вам не нужно чтобы обернуть результат в объект
ctor - он уже будет создан. Если подпрограмма не возвращает объект
, вам, вероятно, придется немного обработать результат, что вы можете получить с помощью boost :: bind
, но служебная функция может сделайте код более читабельным.
В любом случае поможет дополнительный код, в частности экземпляр типа a
и Object
.