Saya mencoba mengatasi masalah berikut: Saya ingin membuat pernyataan if
yang melakukan sesuatu tergantung pada apakah argumen templat adalah objek tertentu atau bukan - dan jika ya, panggil fungsi anggota objek tersebut. Katakanlah saya ingin std::string
cuplikan:
#include <iostream>
#include <string>
template <typename T>
void is_string(const T& arg) {
if (std::is_same<T, const std::string&>::value)
std::cout << arg.length() << std::endl;
else
std::cout << "The argument is not a string" << std::endl;
}
int main() {
is_string(0);
return 0;
}
Itu tidak dapat dikompilasi, dengan kesalahan berikut:
types.cpp: In instantiation of ‘void is_string(const T&) [with T = int]’:
types.cpp:13:13: required from here
types.cpp:7:13: error: request for member ‘length’ in ‘arg’, which is of non-class type ‘const int’
std::cout << arg.length() << std::endl;
Saya rasa apa yang ingin saya capai mungkin tidak dapat dilakukan di C++11, tetapi saya akan menghargai beberapa saran tentang bagaimana melakukan hal seperti itu