Реализация шаблонной функции - PullRequest
2 голосов
/ 07 июля 2019

Я провел несколько экспериментов с шаблонами C ++, и вот что я получил:

header.hpp

template <typename T0>
class A 
{
    void foo0(T0 t0);

    template <typename T1>
    void foo1 (T0 t0, T1 t1);
};

source.cpp

// foo0 body
// ...
// foo1 body
// ...
// And instantiations of class A and foo0 for types "float" and "double"
template class A<float>; 
template class A<double>;

// for foo1 uses separately instantiations
// instantiation foo1 for type "int"
template void A<float>::foo1<int>(float t0, int t1);
template void A<double>::foo1<int>(double t0, int t1);

Как мы можемвидите, для создания экземпляров foo1 требуется повторное перечисление типов T0.Есть ли в C ++ способ создания экземпляра foo1, который использует перечисление ранее созданных экземпляров классов?Как

template void A<T0>::foo1<int>(float t0, int t1);

1 Ответ

2 голосов
/ 07 июля 2019

Я считаю, что c ++ способ сделать это - использовать псевдонимы типов.У вас может быть что-то вроде:

template <typename T0>
class A
{
    void foo0(T0 t0);
    using myType = T0;
    template <typename T1>
    void foo1(T0 t0, T1 t1);

};

template void A<float>::foo1<int>(A::myType t0, int t1);
template void A<double>::foo1<int>(A::myType t0, int t1);

Так вы можете объединить первый параметр экземпляра функции вашего шаблона.

...