Есть ли способ передать аргументы шаблона в функцию объекта, когда тип объекта является аргументом шаблона? - PullRequest
5 голосов
/ 22 сентября 2011

Для иллюстрации:

struct MyFunc {

    template <size_t N>
    void doIt() {
        cout << N << endl;
    }

};

template <typename Func>
struct Pass123ToTemplateFunc {

    static void pass(Func f) {
        f.doIt<123>(); // <-- Error on compile; is there a way to express this?
    }

};

int main() {

    Pass123ToTemplateFunc<MyFunc>::pass(MyFunc());

    return 0;

}

Это в значительной степени чисто синтаксическое любопытство;есть ли в языке способ выразить это без передачи аргументов самой функции doIt?Если нет, то это не страшно, и я уже хорошо знаю способы, которыми я могу изящно обойти это, поэтому нет необходимости предлагать альтернативные решения.(Я приму «нет» в качестве ответа, другими словами, если это правда. :-P)

1 Ответ

8 голосов
/ 22 сентября 2011

Вы должны указать компилятору, что doIt будет шаблоном:

f.template doIt<123>();
...