Как использовать шаблонный параметр в другом шаблонном параметре, объявленном прежде

Можно найти больше использования символов преобразования в log4j javadoc. Например, в http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html .

7
задан Pragmateek 18 September 2009 в 23:25
поделиться

3 ответа

Как говорят другие - Нет, это невозможно, компилятор не может вывести тип T из аргументов, не относящихся к типу шаблона (в случае функций, он определяет типы из аргументов функции ):

14.8.2.4/12 :

Аргумент типа шаблона не может быть выведен из типа не -тип аргумент-шаблона.

В любом случае, вычеты для аргументов шаблона класса не производятся. Примером шаблона функции может быть

template<int> struct having_int { };
template<typename T, T i> void f(having_int<i>);
int main() { having_int<0> h; f(h); }

. В этом случае T не будет выводиться как int - вы должны указать его явно.

8
ответ дан 7 December 2019 в 05:25
поделиться

Вы не можете. Не понимаю, зачем вы тоже это делаете.

0
ответ дан 7 December 2019 в 05:25
поделиться

Ниже приводится чушь, поскольку я не прочитал ваш вопрос должным образом.

На самом деле, я тоже не вижу смысла в том, чего вы пытаетесь достичь.

#include <iostream>

template<typename T, T N>
struct s
{
    T size() { return N; }
};


int main()
{
    s<int, 4> x;
    std::cout << x.size()<< '\n';

    //s<float, 3.14> f; //this doesn't compile
}

Это компилируется для меня с помощью GCC и Comeau Online.

Я думаю, проблема в том, какой тип T вы пытаетесь использовать. Аргументы шаблона, не являющиеся типами, поддерживают только целые типы, а затем указатели на объекты с внешней связью (или что-то в этом роде и, возможно, еще несколько очень ограниченных вещей).

0
ответ дан 7 December 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: