Hallo!C++ çoklu şablon parametreleri ile tek şablon uzmanlığı
İki şablon türünden yalnızca birini uzmanlaştırmak istiyorum. Örneğin. template <typename A, typename B> class X
tek bir işlev için X<float, sometype>::someFunc()
özel bir uygulama olmalıdır.
örnek kod:
main.h:
#include <iostream>
template <typename F, typename I>
class B
{
public:
void someFunc()
{
std::cout << "normal" << std::endl;
};
void someFuncNotSpecial()
{
std::cout << "normal" << std::endl;
};
};
template <typename I>
void B<float, I>::someFunc();
main.cpp:
#include <iostream>
#include "main.h"
using namespace std;
template <typename I>
void B<float, I>::someFunc()
{
cout << "special" << endl;
}
int main(int argc, char *argv[])
{
B<int, int> b1;
b1.someFunc();
b1.someFuncNotSpecial();
B<float, int> b2;
b2.someFunc();
b2.someFuncNotSpecial();
}
Derleme class B
için başarısız olur. Bu doğru mu, C++ bu şekilde mümkün değil mi? En iyi çözüm ne olurdu? 26:
[değiştir]
template <float, typename I> void B<float, I>::someFunc();
main.h'da yol açar hatası: 27: float
template <typename I> void B<float, I>::someFunc();
main.h'da giden bir şablon sabit parametre için geçerli bir tür değildir: hata: eksik 'tip B' türü geçersiz kullanımı '
Ve gcc kullanıyorum.
[değiştir] Bir ihtisas olmayan diğer işlevleri gibi, bütün sınıfı uzmanlaşmak istemiyoruz
. Ayrıca, sadece uzmanlık içinde someFunc
tanımlayabilir
template <typename I>
class B<float, I>
{
public:
void someFunc();
};
template <typename I>
void B<float, I>::someFunc()
{
...
}
:
Sınıf şablonu A sorunuzla ilgili mi? – Doug
Sorunun anlaşılmasını kolaylaştıracağını düşündüm. Onu kaldıracağım. – tauran
Bu, stackoverflow'ta yüzlerce kez soruldu. :) Bazılarımızın bu gibi sorularla gerçek bir şablon SSS oluşturabileceğini düşünüyorum. Kişiler soru sorulup cevaplanmadığını görmek için SSS'yi kontrol edebilirler. –