I need to check data type, but can't handle the noncopyable class. Now I use pointer instead of references. Is there a better way?
#include <iostream>
#include <functional>
template <typename T, std::enable_if<std::is_integral<T>::value, bool> = true>
void data_type(T const& t) {
std::cout << "integer" << std::endl;
}
void data_type(...) {
std::cout << "unknown" << std::endl;
}
int main() {
struct noncopyable_type {
noncopyable_type() {}
noncopyable_type(const noncopyable_type&) = delete;
};
int i;
noncopyable_type s;
// first try
data_type(i); // ok
data_type(s); // error: call to deleted constructor
// try again
data_type(std::cref(i)); // ok, but the type is std::reference_wrapper, not integer
data_type(std::cref(s)); // ok
}
Aucun commentaire:
Enregistrer un commentaire