小编Qub*_*ub1的帖子

C++ 模块中的前向声明 (MSVC)

我最近一直在试验 MSVC 提供的模块实现,我遇到了一个有趣的场景。我有两个在它们的接口中相互依赖的类,这意味着我必须使用前向声明来编译它。以下代码显示了一个示例:

Module interface

export module FooBar;

export namespace FooBar {
    class Bar;

    class Foo {
    public:
        Bar createBar();
    };

    class Bar {
    public:
        Foo createFoo();
    };
}
Run Code Online (Sandbox Code Playgroud)

Module implementation

module FooBar;

namespace FooBar {
    Bar Foo::createBar() {
        return Bar();
    }

    Foo Bar::createFoo() {
        return Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将这两个类拆分为它们自己的名为Foo和的模块Bar。但是,每个模块都需要导入另一个模块,因为它们的接口相互依赖。根据目前的模块提案,不允许循环接口导入。这篇文章建议使用proclaimed ownership声明,但是在模块的MSVC实现中似乎还没有实现。

因此,我是否正确假设目前无法使用 MSVC 提供的当前实现解决这种情况?还是我缺少一些替代方案?在这种情况下,情况非常简单,但是我在模块化具有许多具有此类依赖关系的类的库时遇到了这个问题。我意识到循环依赖通常表明设计不佳,但在某些情况下,它们不可避免或难以重构。

c++ circular-dependency visual-c++ c++-modules

9
推荐指数
1
解决办法
642
查看次数

根据两点旋转图像

我的表单上有两个点,还有一个图片框,如下所示:

*

   [^]
   [ ]

          *
Run Code Online (Sandbox Code Playgroud)

我想将图片框与点对齐,这样它看起来像这样:

*

   \^\
    \ \

          *
Run Code Online (Sandbox Code Playgroud)

我如何计算角度以及如何旋转PictureBox?

目前我正在使用这个:

double xDifference = Math.Abs(point2.X - point1.X);
double yDifference = Math.Abs(point2.Y - point1.Y);

double angle = Math.Atan(yDifference / xDifference) * 180 / Math.PI;
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为x和y值是绝对的,因此如果点2留在点1,它们就无法计算它.

为了旋转图像,我发现了以下功能:

    public Bitmap rotateImage(Image image, PointF offset, float angle) {
        // Create a new empty bitmap to hold rotated image
        Bitmap rotatedBmp = new Bitmap(image.Width, image.Height);
        rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);

        // Make a graphics object from the empty bitmap
        Graphics g = Graphics.FromImage(rotatedBmp);

        // Put …
Run Code Online (Sandbox Code Playgroud)

c# math geometry

7
推荐指数
1
解决办法
736
查看次数

jQuery fadeIn和fadeOut在chrome中滞后但在Firefox中没有

我有一个叠加层,应该在用户点击按钮后淡入淡出.我正在使用jQuery fadeIn和fadeOut.然而,在这样做时,chrome存在显着的滞后,而在Firefox中,动画运行顺畅.

这是我的HTML:

<div class="overlay">
    <div class="overlay_profile">
        <div class="overlay_contents">
            <div class="overlay_profile_info">
                <img src="images/avatars/1.gif" />
                <div class="overlay_profile_info_text_username">
                    Qub1
                </div>
                <div class="overlay_profile_info_text_other">
                    Level 1
                </div>
            </div>
        </div>
    </div>
    <div class="overlay_close">X</div>
</div>
<div class="overlay_shadow"></div>
Run Code Online (Sandbox Code Playgroud)

我的CSS:

.overlay {
    display: none;
    padding: 20px;
    position: fixed;
    top: 150px;
    right: 150px;
    bottom: 100px;
    left: 150px;
    z-index: 2;
    background: #978470;
    border: 3px solid #CCC;
    border-radius: 20px;
    box-shadow: 0 0 20px #000, inset 0 0 10px #6A5C4E;
}

.overlay_shadow {
    display: none;
    position: fixed;
    top: 0;
    right: 0;
    bottom: …
Run Code Online (Sandbox Code Playgroud)

html css jquery google-chrome css3

5
推荐指数
1
解决办法
2612
查看次数

将类函数作为参数传递给另一个类,以用作JavaScript中的回调

好吧,所以我有两节课.类1包含一个特定的函数,它访问某些类的属性.这就是它的样子:

function class1() {
    this.variable = "something";
}

class1.prototype.callback = function() {
    console.log(this.variable); // Returns undefined
}
Run Code Online (Sandbox Code Playgroud)

Class 2可以调用它给出的任何函数,如下所示:

function class2() {}

class2.prototype.caller = function(callback) {
    callback();
}
Run Code Online (Sandbox Code Playgroud)

然后在我的常规Javascript中我这样做:

var c1 = new class1();
var c2 = new class2();
c2.caller(c1.callback);
Run Code Online (Sandbox Code Playgroud)

它应该返回"某些东西",但它会抛出一个未定义的错误.我知道这是因为它在class2的范围内,它试图访问那里的变量,但是我不知道如何让它在class1的范围内执行.

任何帮助是极大的赞赏!

javascript class

3
推荐指数
1
解决办法
4472
查看次数

SetWindowPos 插入之后,而不是之前?

好的,所以我正在尝试将我的表单覆盖在另一个应用程序之上。现在,作为最后一步,我需要确保表单的 z-index 始终位于我正在覆盖的应用程序上方。我很确定我需要使用 SetWindowPos ( https://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx ) 来做到这一点,它有允许我设置窗口的 z-index 的参数。但是,它只允许我将它设置为我试图覆盖的应用程序下的 z-index。我如何使用该函数来覆盖应用程序?我说的hWndInsertAfter参数就是参数。

这就是我现在使用代码的方式(它是表单的基础): SetWindowPos(this.Handle, clientHandle, clientTopLeft.X, clientTopLeft.Y, clientWidth, clientHeight, SWP.SHOWWINDOW);

谢谢!

c# winapi overlay

2
推荐指数
1
解决办法
633
查看次数

在非静态数据成员上使用SFINAE?

我是SFINAE的新手,我正在尝试编写一个简单的矢量模板.我想要实现的是根据为Vector设置的维度启用z成员变量.

我试图使用以下代码实现此效果:

template<unsigned int DIMENSIONS>
class Vector {
    // The x and y variables (same as z)

    template<typename = typename std::enable_if<DIMENSIONS >= 3>::type>
    /// <summary>
    /// The z coordinate.
    /// </summary>
    Float& z;

    Vector() : x(values[0]), y(values[1]) {
    }

    // Other member functions and variables

    std::vector<float> values;
};

template <>
Vector<3>::Vector() : x(values[0]), y(values[1]), z(values[2]) {
}
Run Code Online (Sandbox Code Playgroud)

这应该在有3个或更多维度时启用z变量.这使编译器抱怨以下错误:

'Vector<DIMENSIONS>::z': only static data member templates are allowed
Run Code Online (Sandbox Code Playgroud)

另外,在这种情况下,我不完全确定如何在SFINAE中使用初始化列表.因为如果维度小于3,则不必初始化z(因为它不存在).到目前为止,我已经使用了专门的3D向量构造函数(参见上面的代码).

但智能感知仍在报道 Members 'x', 'y', 'z' are not initialized in this constructor.

任何帮助,将不胜感激.

c++ sfinae template-specialization

2
推荐指数
1
解决办法
307
查看次数