Давайте asssume, что у нас есть шаблон несильно:Можно ли передать шаблон функции в качестве аргумента шаблона?
template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}
и теперь мы хотим, чтобы использовать его в качестве аргумента в другой шаблон, например, подобный
template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}
Возможно ли это?
Я знаю, что могу использовать структуру с определенным() оператором. Мне просто интересно, какие функции.
EDIT:
Пока я писал, что вопрос мой друг нашел частичное решение:
template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}
Но все равно - мне очень интересно, если это возможно без материализации типа функции до вызов. Например, я могу назвать пройденный шаблон с различными типами комбинаций:
template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 a, T2 b) {
// some code...
a = some_function<T1, T1, T1>(a, a);
a = some_function<T1, T2, T1>(a, b);
b = some_function<T2, T2, T2>(b, b);
b = some_function<T2, T1, T2>(b, a);
// some code...
}
Я не понимаю ни слова о том, что вы говорите. -1, можете ли вы предоставить иллюстрацию для нас, которые не владеют стандартным? – lurscher
@ lurscher, потому что вы не понимаете, что это ужасная причина для downvote. Я не сжимаю квантовых физиков, когда они говорят о квантовой физике, потому что я этого не понимаю. –
@SethCarnegie, я не согласен. Я думаю, что это само по себе очень хорошая причина. кроме того, ответ неверен; то, что вопрос хочет сделать, вполне возможно, даже в C++ 03.Я думаю, что есть разрыв между тем, что спрашивает SO, и что отвечает pmr, следовательно, downvote. Если он улучшит свой ответ, я буду более чем счастлив снять его – lurscher