这里为什么会显式实例化无效呢?
代码如下:
#pragma once
#include<iostream>
#include<cstdlib>
template <typename T,int n>
class Arraytp
{
T ar[n];
public:
Arraytp() {};
explicit Arraytp(const T& v);
virtual T& operator[](int i);
virtual T operator[](int i) const;
~Arraytp();
};
template class Arraytp<std::string, 100>
{
std::string ar[100];
public:
Arraytp() {};
explicit Arraytp(const std::string& v);
virtual std::string& operator[](int i);
virtual std::string operator[](int i) const;
~Arraytp();
};
template<class T, int n>
inline Arraytp<T, n>::Arraytp(const T & v)
{
for (int i = 0; i < n; i++)
ar[i] = v;
}
template<class T, int n>
inline T & Arraytp<T, n>::operator[](int i)
{
if (i < 0 || i >= n)
{
std::cerr << "数组大小超出范围";
std::exit[EXIT_FAILURE];
}
return ar[i];
}
template<class T, int n>
inline T Arraytp<T, n>::operator[](int i) const
{
if (i < 0 || i >= n)
{
std::cerr << "数组大小超出范围";
std::exit[EXIT_FAILURE];
}
return ar[i];
}
template<class T, int n>
inline Arraytp<T, n>::~Arraytp()
{
}