gpt4 book ai didi

c++ - 类型转换模板值参数

转载 作者:行者123 更新时间:2023-11-28 01:02:18 24 4
gpt4 key购买 nike

我有一个模板类,它有一个 bool 模板参数。是否有合法的方法将其转换为对同一对象的引用,但 bool 值取反?

作为说明性示例,下面我有一个 Matrix 类,其转置可以由相同的对象数据表示,但“转置”模板参数相反。

template <bool transposed>
class Transposable_matrix
{
...
Transposable_matrix<!transposed>& transpose()
{
static_cast<Transposable_matrix<!transposed>& >(*this);
}
};

上面的“transpose()”方法试图在不执行复制的情况下转置对象,方法是简单地返回对自身的引用,但转置标志反转。但是,可能不足为奇的是,强制转换操作在编译时失败了。有没有可接受的方法来做到这一点?我猜 reinterpret_cast 不能保证正确性。我可以使用代理对象来表示转置对象,但这将涉及重构整个类。

编辑

在使用 reinterpret cast 之后,我所有的单元测试都通过了。但是重新解释 cast 让我感到紧张——这是否属于“未定义行为”的范畴而我只是走运?或者因为这两种类型( Matrix<true>Matrix<false> )具有相同的成员,我应该安全吗?

编辑 2注意到这个类没有虚拟方法会有帮助吗?因此,无论转置状态如何,数据成员的逐位拷贝似乎都应该有效,因此 c 风格转换(或重新解释转换)应该始终按照我的预期进行,对吧?

最佳答案

The "transpose()" method below attempts to transpose the object without performing a copy, by simply returning a reference to the itself but with the transposed flag inverted.

那是不可能的。

对于 transposed 的任何值(这是 bool 值),Transposable_matrix<true>Transposable_matrix<false>是两种不同且不兼容的类型。不能使用 static_cast 将一个转换为另一个.

关于c++ - 类型转换模板值参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117728/

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