如何使用模板结构而不是函数检查容器类型?
How to check type of container using template struct instead of function?
在此 post check type of element in stl container - c++ 中,用户 UncleBens 展示了如何使用结构 same_type
和函数 containers_of_same_type
检查容器的类型
我正在尝试做同样的事情,除了我想使用结构而不是使用函数来检查容器。我有以下代码,但它给我错误:
// Working
template<typename X, typename Y>
struct SameType {
enum { result = 0 };
};
// Working
template<typename T>
struct SameType<T, T> {
enum { result = 1 };
};
// This struct is not working
template<typename C1, typename C2>
struct SameContainerType {
enum { value = SameType<typename C1::value_type, typename C2::value_type>::result };
};
#include <iostream>
#include <vector>
#include <list>
int main() {
std::cout << SameType<int, int>::result << std::endl;; // 1
std::cout << SameType<int, double>::result << std::endl;; // 0
std::cout << SameContainerType<std::vector<int>(), std::list<int>()>::value; // error
}
错误是,C1
和 C2
必须是命名空间或 class 才能使用 ::
std::vector<int>()
是 returns 一个 std::vector<int>
的函数。您需要删除 ()
.
int main() {
std::cout << SameType<int, int>::result << std::endl;; // 1
std::cout << SameType<int, double>::result << std::endl;; // 0
std::cout << SameContainerType<std::vector<int>, std::list<int>>::value; // 1
}
在此 post check type of element in stl container - c++ 中,用户 UncleBens 展示了如何使用结构 same_type
和函数 containers_of_same_type
我正在尝试做同样的事情,除了我想使用结构而不是使用函数来检查容器。我有以下代码,但它给我错误:
// Working
template<typename X, typename Y>
struct SameType {
enum { result = 0 };
};
// Working
template<typename T>
struct SameType<T, T> {
enum { result = 1 };
};
// This struct is not working
template<typename C1, typename C2>
struct SameContainerType {
enum { value = SameType<typename C1::value_type, typename C2::value_type>::result };
};
#include <iostream>
#include <vector>
#include <list>
int main() {
std::cout << SameType<int, int>::result << std::endl;; // 1
std::cout << SameType<int, double>::result << std::endl;; // 0
std::cout << SameContainerType<std::vector<int>(), std::list<int>()>::value; // error
}
错误是,C1
和 C2
必须是命名空间或 class 才能使用 ::
std::vector<int>()
是 returns 一个 std::vector<int>
的函数。您需要删除 ()
.
int main() {
std::cout << SameType<int, int>::result << std::endl;; // 1
std::cout << SameType<int, double>::result << std::endl;; // 0
std::cout << SameContainerType<std::vector<int>, std::list<int>>::value; // 1
}