C++ 如何访问模板包参数的模板参数
我正在尝试创建一个模板类,该类将使比较函数能够返回一个整数[0-等于,>0a应排在第一位,我将从另一个方面解决这个问题:如果C++ 如何访问模板包参数的模板参数,c++,templates,c++17,C++,Templates,C++17,我正在尝试创建一个模板类,该类将使比较函数能够返回一个整数[0-等于,>0a应排在第一位,我将从另一个方面解决这个问题:如果T有模板参数,如何提取模板参数?下面是一个示例: template<typename T> void foo(T v) { // T is std::vector<int>, how to extract `int`? } int main() { foo(std::vector{1, 2, 3, 4}); } 当它是向量时,用T
T
有模板参数,如何提取模板参数?下面是一个示例:
template<typename T>
void foo(T v) {
// T is std::vector<int>, how to extract `int`?
}
int main() {
foo(std::vector{1, 2, 3, 4});
}
当它是向量时,用T
做什么能给我们带来什么?好吧,如果你能用一个简单的类型T
做点什么,你甚至不需要模板参数,使你的界面更灵活:
template<typename>
struct sort_traits {};
template<typename T, uint32_t offset_, char order_>
struct sort_traits<Sort<T, offset_, order_>> {
using type = T
static constexpr auto offset = offset_;
static constexpr auto order = order_;
};
这也增加了有一天添加另一种排序的可能性,这种排序可能会有不同的模板参数或不同的内容被暴露出来。我将从另一个方面考虑这个问题:如果
T
有模板参数,如何提取模板参数?下面是一个示例:
template<typename T>
void foo(T v) {
// T is std::vector<int>, how to extract `int`?
}
int main() {
foo(std::vector{1, 2, 3, 4});
}
当它是向量时,用T
做什么能给我们带来什么?好吧,如果你能用一个简单的类型T
做点什么,你甚至不需要模板参数,使你的界面更灵活:
template<typename>
struct sort_traits {};
template<typename T, uint32_t offset_, char order_>
struct sort_traits<Sort<T, offset_, order_>> {
using type = T
static constexpr auto offset = offset_;
static constexpr auto order = order_;
};
这也增加了有一天添加另一种排序的可能性,该排序将有不同的模板参数或不同的内容公开。如果不使用此表单,这将变得非常容易:
template<typename T, uint32_t offset, char Order = 'A'>
struct Sort {};
template<uint32_t keyLength, template<typename T,uint32_t offset, char Order> class ... sort>
class Comparator;
是一个折叠表达式:
(sizeof(T) + ... + keyLength)
以此类推。如果不使用此表单,则这将变得非常容易:
template<typename T, uint32_t offset, char Order = 'A'>
struct Sort {};
template<uint32_t keyLength, template<typename T,uint32_t offset, char Order> class ... sort>
class Comparator;
是一个折叠表达式:
(sizeof(T) + ... + keyLength)
诸如此类。将包转发到
std::tuple
并使用get()
似乎是最简单的方法。将包转发到std::tuple
并使用get()
似乎是最简单的方法。@JeJo-yes提到了它。我说提取是可能的,还有成员类型别名。@JeJo-yes提到了它。我说提取是可能的,还有成员类型别名。
(sizeof(T) + ... + keyLength)