Не уверен, что понимаю, что вы хотите, и не совсем бесплатную функцию (но статический метод в классе шаблона), но я предполагаю, что вы запрашиваете что-то похожее, как показано ниже
template <typename>
struct proFunc;
template <template <typename ...> class C, typename ... Ts>
struct proFunc<C<Ts...>>
{
static void func (Ts ...)
{ }
};
[ 115], что вы можете использовать этот способ
using ArgsTuple = std::tuple<int, float>;
proFunc<ArgsTuple>::func(1, 2.f);
и вы также можете проверить, что
static_assert( std::is_same<decltype(&proFunc<ArgsTuple>::func),
void(*)(int, float)>::value, "!" );
Чтобы получить что-то более похожее на свободную функцию, вы можете использовать указатели на функции
auto funcPnt = &proFunc<ArgsTuple>::func;
funcPnt(3, 4.f);
Прочтите полную запись на http://cocoawithlove.com .
В Какао NSPredicate работает во многих так же, как и предложение WHERE в SQL. Основная причина того, что NSPredicate переносится на iPhone, что NSPredicate выполняет ту же роль в Основные данные, которые соответствуют условиям "WHERE" в SQL - разрешить постоянное хранилище для получения объектов, удовлетворяющих определенным критериев.
// given an NSDictionary created used the above method named "row"...
NSPredicate *johnSmithPredicate =
[NSPredicate predicateWithFormat:@"firstname = 'John' AND lastname = 'Smith'"];
BOOL rowMatchesPredicate = [johnSmithPredicate evaluateWithObject:row];
Проверка адреса электронной почты
Оператор сравнения "LIKE" в NSPredicate (NSLikePredicateOperatorType) равно обычно используется как удобное средство тестирование, соответствует ли NSString Регулярное выражение. Это преимущество над полными библиотеками с большим варианты и возможность замены что это уже в Какао - нет библиотеки, без связывания, без проблем.
Вы можете провести простой тест:
NSPredicate *regExPredicate =
[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regularExpressionString];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:myString];
Единственный вопрос, который остается, это: что такое регулярное выражение, которое может использоваться для проверки того, что NSString содержит синтаксически правильный адрес электронной почты адрес?
NSString *emailRegEx =
@"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
@"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
Попробуйте CSRegex: http://www.cocoadev.com/index.pl?CSRegex
Это быстрый и простой класс регулярных выражений, который может быть брошенным в любой проект Cocoa с минимумом суеты. Он состоит всего из двух файлов и без внешних зависимостей.
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"];
BOOL result = [predicate evaluateWithObject:@"mail@domain.com"];
Согласно Руководству по предикатам :
Соответствует
Левое выражение равно правому выражению с использованием сравнение в стиле регулярного выражения в соответствии с ICU v3 (подробнее см. ICU Руководство пользователя для регулярных выражений ).
В руководстве можно найти даже пример , написанный Apple .
Вместо SELF
вы также можно использовать путь ключа . (И, возможно, некоторые другие литералы тоже.)
Другой вариант - это оболочка libregex в Google Toolbox для Mac: http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMRegex.h