gpt4 book ai didi

c++ - 为什么带有约束的模板模板参数需要更严格的参数?

转载 作者:可可西里 更新时间:2023-11-01 16:01:43 27 4
gpt4 key购买 nike

N3580描述了以下场景:

template<Object T, template<Object> Cont>
struct stack {
Cont<T> container;
};

template<Object>
struct my_vector;

template<Regular>
struct my_list;

template<typename>
struct my_magic;

在这里,RegularObject 的细化;也就是说,每个 Regular是一个 Object但不是每个ObjectRegular .

我希望类型系统对于 stack<X, Y> 是这样的有效, X必须是 ObjectY必须可以用 Object 实例化.这个将意味着 stack<int, my_vector>stack<int, my_magic>有效,同时stack<int, my_list>不是。很像普通函数的情况:

struct Base {};
struct Derived : Base {};

void foo(Base* p, function<void(Base*)> fun) {
fun(p);
}

template<typename T>
void bar(T*);

我希望如果 pBase* , 然后 foo(p, bar<Base>)foo(p,
bar<void>)
有效,而 foo(p, bar<Derived>)不是;毕竟,一个 Base*隐式转换为 void* , 但不是 Derived* .

但是,对于模板,情况恰恰相反。仅有的 stack<int, my_vector>stack<int, my_list>是允许的,而 stack<int,
my_magic>
禁止。为什么是这样? my_magic适用于任何类型,同时my_list可能会失败,具体取决于我给它的对象。而且,我可以平凡制作my_magic仅使用对象:

template<Object T>
struct my_restricted_magic : my_magic<T> {};

现在my_restricted_magic可以与 stack 一起使用.另一方面,有没有简单的方法来制作 my_list它接受任何类型,但这正是现在允许将其作为模板模板参数传递。

我是否误解了模板参数约束的目的参数?

最佳答案

这是提案中的错误。受约束的模板模板参数应该接受约束较弱的参数。

关于c++ - 为什么带有约束的模板模板参数需要更严格的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com