Я не хочу использовать перегрузку функции для небольшого изменения функции. Вместо этого я хочу использовать проверку typeid () передачи параметра шаблонной функции ниже. Но, если я не закомментирую строку в коде ниже, это даст ошибку компиляции:
Severity Code Description Project File Line Suppression State
Error invalid operands to binary expression ('basic_ostream<char, std::char_traits<char> >' and 'std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >')
Как я понимаю, компилятор не знает, как себя вести. Есть ли решение для этого?
Код:
#include <iostream>
#include <vector>
using namespace std;
template <class T>
void Test(T A)
{
if (typeid(T) == typeid(vector<string>)) {
cout << "The type of A is vector<string>" << endl << endl;
//cout << "First element of A is:" << A[0] << endl; // If I don't comment out this line, it gives the compiler error.
}
if (typeid(T) == typeid(vector<vector<string>>)) {
cout << "The type of A is vector<vector<string>>" << endl;
cout << "First row first element of A is:" << A[0][0] << endl;
}
}
int main()
{
Test(vector<string> {"1", "2", "3"});
Test(vector<vector<string>> { {"11", "12", "13"}, { "21", "22", "23" }});
return 0;
}