- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
大家好。
我正在使用 Boost Units 库编写一些代码,但遇到了问题。
我已经设法从 Boost 代码中抽象出问题,这样您就不会浏览大量的 Boost 模板元编程。虽然我敢肯定,如果您有这方面的经验,它可能会有所帮助。这是复制品:
class Base{};
class Derived : public Base
{
public:
Derived(){}
Derived(const Base &){}
};
class Q {};
class U
{
public:
template< typename Y >
Q operator * (Y)
{
Q r;
return r;
}
};
Base operator * (U, const Base &)
{
Base r;
return r;
}
int main(int argc, char **argv)
{
Base myBase;
U myU;
Base myOtherBase = myU * myBase;
Derived myDerived;
Derived myOtherDerived = myU * myDerived;
return 0;
}
所以问题(具体)如下:myU * myBase
使用 operator * (U, const Base &)
并返回 Base
的类型,到目前为止一切都很好。鉴于 myU * myDerived
坚持使用广义U::operator * (Y)
因此返回 Q
,不好,因为我想要一个 Base
再次。
现在,除 Base
以外的所有类和 Derived
是 boost 库类,所以我不能修改 U 的成员。我如何“击败”U::operator * (Y)
对于重载/模板推导/实例化,在这种情况下,以一种优雅且“一劳永逸”的方式。
我正在使用 MSVC++ 2008,以防它与任何人相关。
编辑:在答案中添加了一个可能(很可能)的解决方案
最佳答案
使用以下应该可以解决您的问题
Base myOtherDerived = myU * (Base&)myDerived;
// or
Base myOtherDerived = myU * static_cast<Base&>(myDerived);
代替
Derived myOtherDerived = myU * myDerived;
虽然这不是我们所说的“干净的解决方案”。我正在努力寻找更好的方法。
关于c++ - 重载运算符 & 继承 & 模板(一个强大的组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999620/
Stackoverflow JS Genius的! 我当前的项目有一个问题,它正在使用 Node 的HTTP createServer,并使用Formidable来解析主体数据。 请参阅下面的代码。
我正在尝试将文件上传到我的 NodeJS 服务器。我目前收到错误: 错误:错误的内容类型 header ,未知的内容类型:image/jpeg “image/jpeg”是有效的 MIME 类型,为什么
我有一个用作路由器的 Node.JS 服务器,可以向它发出 post 请求以上传文件,应该只允许 jpg/png/jpeg 扩展名我目前正在做的是: var form = new formidable
我正在使用https://github.com/felixge/node-formidable用于使用express上传文件。 虽然它工作得很好,但有一个问题:我有一个包含 9 个 type="fil
Haskell 的类型推理引擎比 Scala 的类型推理引擎强大得多。在 Haskell 中,我很少需要显式编写类型,而在 Scala 中,类型只能在表达式中推断,而不能在方法定义中推断。 例如,请参
我将 Superpowered 用于各种实时 FX,它们都非常简单。然而,音高变换是另一回事,我认为事实上是因为它基于时间拉伸(stretch)算法,当然必须处理随时间变化的输出,这比应用 EQ 或混
我正在使用mean stack 和formidable上传文件 表单具有 multipart/form-data 属性 exports.create = function(req, res) {
我正在尝试构建我的第一个 node.js 应用程序,但是,使用 node server.js 运行时,我收到以下错误消息: connect: multipart: use parser (multip
对于强大的 npm 包,当我使用 import * as formidable from "formidable" 时,我收到一条错误消息,指出 formidable({ multiples: tru
我注意到了 std::string str; str += 'b'; // works str.append('b'); // does not work str.append(1, 'b'); //
我有一个需要访问本地 FS 的 HTML/JS(YUI 框架)照片管理器。我应该将 HTML/JS 移动到 AIR,还是硬着头皮将其“移植”到 Flex AIR? 我知道营销说的是什么,但我想要真正的
我是一名优秀的程序员,十分优秀!