有人已经问了这个问题,但是讨论结束后原始的问题没有得到解答。
假设你有以下内容:
template<size_t i, class f_type>
void call_with_i(f_type f);
functor_type可以是以下两种之一:
a) 一个结构体,其中包含一个方法,该方法具有以下签名:
template<size_t i> operator()() const;
或者,一个长得像这样的函数:
template<size_t i> foo();
我希望"call_with_i<42>(foo)"相当于"foo<42>()",但我无法确定正确的语法。我会满意于只实现(a)的方案,但(a)+(b)的解决方案更好。我已经尝试了以下语法:
f< i >(); // doesn't work
f()< i >; // doesn't work
f.operator< i >(); // doesn't work
f.operator()< i >; // doesn't work
f.operator()< i >(); // works on msvc, but doesn't work on gcc.
您如何使用显式模板参数调用operator()?有没有一种方法可以以调用模板化的自由函数的相同语法方式调用它?
附注:如果您想知道我正在使用它做什么,那是因为我正在编写一个函数repeat_to,其中repeat_to<10>(f)调用f(0),然后f(1)... f(10)。我使用这个函数来按索引并行迭代多个boost :: fusion向量。是的,我可以使用迭代器,或者我可以只使用命名成员函数,但我仍然想知道答案。
编辑注意:我划掉了一些东西,因为将模板化的自由函数作为参数传递毫无意义。