Шаблонный шаблонный шаблонный аргумент

У меня есть класс, который использует шаблоны. Это что-то вроде этого:

template <typename T>
class a
{

public:
a(T arg);
a<T> func(a arg); // This seems to work, but...
a<T> func(a<T> arg); // ...should I be doing this instead?

private:
T local;
};

Обратите внимание на два шаблона функций для func, Оба скомпилируют (конечно, не одновременно), но какой из них правильный, или это не имеет значения? Во первых, я указал, что class a является аргументом … В этом первом случае можно использовать другой тип вместо T … Например, я могу сделать это:

a<float> b;
a<int> c;
a<int> d;
d = c+ b;

Я предполагаю, что ответ «нет», потому что он не компилируется!

Во втором случае ясно, что аргумент должен иметь тот же тип шаблона.

Из-за того, что я обсуждал выше, я предполагаю, что компилятор на самом деле интерпретирует a<T> func(a arg); как a<T> func(a<T> arg);, Я прав?

0

Решение

В вашем шаблоне класса a средства a<All the tempalte args here> т.е. a<T>

Так что обе ваши функции одинаковы.

Если вы хотите предоставить другой тип, вы должны использовать функцию шаблона

template <typename T> {
class a {
template<typename U>
a<T> func(a<U> arg);
}

Вы также можете рассмотреть возможность возврата std::common_type<T, U>::type но в вашем случае он не скомпилируется, потому что общий тип для float а также int является float

a<float> x = a<int>(1) + a<float>(8)

должен работать в этом случае

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]