通过在普通台式PC上运行简单的C ++程序进行基本测试,似乎可以假设任何类型的指针(包括函数指针)的大小等于目标体系结构位的大小。
例如:在32位体系结构中-> 4个字节,在64位体系结构中-> 8个字节。
但是我记得读过的话,它不是一般的那样!
所以我想知道这种情况会怎样?
概念可用于将类型限制为模板参数,如下例所示:
template<typename t, int v>
concept the_concept1 = sizeof(t) > v;
template<int v, the_concept1<v> t>
struct some_struct1{};
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用类似的方法,其值如下例所示:
template<int v1, int v2>
concept the_concept2 = v1 > v2;
template<int v1, the_concept2<v1> v2>
struct some_struct2{};
Run Code Online (Sandbox Code Playgroud)
但是使用 G++ 10 我收到以下错误消息:
error: ‘the_concept2’ does not constrain a type
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否可以使用概念来限制价值观?如果是这样,那么我该怎么做?
编辑:我的最终目标是在具有可变参数模板参数的模板结构声明中使用该概念,例如:
template<typename t, std::size_t ... v>
struct the_struct;
Run Code Online (Sandbox Code Playgroud)
我需要一个概念来检查each v是否小于sizeof(t).
在阅读了许多类似主题的帖子并思考了一段时间后,我仍然不明白为什么禁止实现模板虚函数。在我看来,这种情况与混合静态多态性与动态多态性无关,而是在编译时使用函数的模板区分,然后在运行时对每个单独创建的函数使用动态多态性。时间。
考虑这段代码:
class parrent{
public:
virtual float function(float value)const{
return value;
}
virtual double function(double value)const{
return value;
}
virtual long double function(long double value)const{
return value;
}
virtual ~parrent() = default;
};
class a_child:public parrent{
public:
float function(float value)const override{
return value + 1.5;
}
double function(double value)const override{
return value + 1.5;
}
long double function(long double value)const override{
return value + 1.5;
}
};
Run Code Online (Sandbox Code Playgroud)
显然这段代码是没问题的,能够达到预期的效果。但使用模板重写类似的代码:
class parrent{
public:
template<typename t__>
virtual t__ function(t__ value)const{
return value;
} …Run Code Online (Sandbox Code Playgroud)