Пусть мы имеем:Определение количества аргументов C++ шаблона функтора
template<typename F, typename T1, typename T2>
void my_magic_method(F func, T1 t1, T2 t2)
{
if (???)
func(t1);
else
func(t1,t2);
}
Что может помочь мне определить:
Количество аргументов
Может быть, типы каждого аргумента
Тип возвращаемого значения
Я не могу использовать VARIADIC шаблоны из-за МСВС 2010 ...
UPDATE
Мой первый раствор:
template<typename F>
auto my_magic_func(F f) -> decltype(f(1))
{
return f(1);
}
template<typename F>
auto my_magic_func(F f, void * fake = NULL) -> decltype(f(2,3))
{
return f(2,3);
}
int main()
{
auto x1 = my_magic_func([](int a){ return a+100; });
auto x2 = my_magic_func([](int a, int b){ return a*b; });
// x1 == 1+100
// x2 == 2*3
}
Вот мой образ функции типа перегрузки. Это работает, но, может быть, лучше солить?
Моя проблема заключается в определении числа аргументов typename F. В вашем решении есть 2 разных my_magic_funcs для определения. Моя текущая проблема слишком сложна по сравнению с моим вопросом. Это только часть его. – k06a
@ k06a: Ваша проблема - проблема [XY] (http://meta.stackexchange.com/a/66378/166663) - если вы сказали, что пытаетесь выполнить, а не как пытаетесь (и неудача), чтобы выполнить его, было бы намного легче помочь вам. – ildjarn
@ k06a: так почему вы ** задали ** этот вопрос, если вы не ответили на вопрос? Почему бы вам не спросить о проблеме, которую вы действительно хотите решить, а не о другой, более простой, решение которой вы ** не заботитесь? – jalf