小编Leo*_*ele的帖子

如何引用接口在Java中实现的类类型?

我遇到了我正在制作的程序中的接口问题.我想创建一个接口,它的一个方法接收/返回对自己对象类型的引用.它是这样的:

public interface I {
    ? getSelf();
}

public class A implements I {
    A getSelf() {
        return this;
    }
}

public class B implements I {
    B getSelf() {
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能使用"I",它是"?",因为我不想返回对接口的引用,而是类.我搜索并发现Java中没有办法"自我引用",所以我不能只用"?"来代替它.在"自"关键字的示例中或类似的东西.实际上,我找到了一个类似的解决方案

public interface I<SELF> {
    SELF getSelf();
}

public class A implements I<A> {
    A getSelf() {
        return this;
    }
}

public class B implements I<B> {
    B getSelf() {
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

但它看起来似乎是一种解决方法或类似的东西.还有另一种方法吗?

java generics interface self-reference

19
推荐指数
2
解决办法
7992
查看次数

为什么std :: function不是函数指针时的有效模板参数?

我已经定义了一个名为class的模板CallBackAtInit,其目的只是在初始化时调用一个函数(构造函数).该函数在模板参数中指定.问题是模板不接受std::function参数; 但他们接受函数指针.为什么?

这是我的代码:

#include <iostream>
#include <functional>

/* Does not work:*/     template <typename return_type, typename arg_type, std::function<return_type(arg_type)> call_back>
/* Work fine: *///      template <typename return_type, typename arg_type, return_type(*call_back)(arg_type)>

class CallBackAtInit {
public:
    CallBackAtInit(arg_type arg)
    {
        call_back(arg);
    };
};

void printInt(int i);

class HoldInt : private CallBackAtInit<void, int, printInt> {
public:
    HoldInt(int integer)
    : CallBackAtInit(integer)
    {}
    // ...
};

int main(int argc, char** argv)
{
    HoldInt hi(10);
    return 0;
}

void printInt(int i)
{
    std::cout << i …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers c++11 std-function

15
推荐指数
1
解决办法
5206
查看次数

使用SDL从键盘读取输入的最佳方法是什么?

update()每秒运行一次方法来"更新"用户的键盘输入,以便稍后在程序的逻辑部分中读取它.所以我在SDL Docs中找到了两种实现方法,我不确定应该使用哪一种方法.

1; 使用SDL_PollEvent循环搜索关键/关闭事件并将关键状态保存在地图中,以便我可以检查程序逻辑中的每个关键状态.

注意:或者,我也可以使用SDL_PeepEvents而不是SDL_PollEvent来仅采用重要的事件类型; 所以,它不会"抛弃"队列中的事件.

std::map<int, bool> keyboard; // Saves the state(true=pressed; false=released) of each SDL_Key.

void update()
{
    SDL_Event event;
    while( SDL_PollEvent(&event))
    {
        switch(event.type)
        {
        case SDL_KEYDOWN:
            keyboard[event.key.keysym.sym] = false;
            break;
        case SDL_KEYUP:
            keyboard[event.key.keysym.sym] = true;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2; 每帧从键盘拍摄快照,以便我可以轻松阅读.

Uint8* keyboard;

void update()
{
    SDL_PumpEvents();
    keyboard = SDL_GetKeyState(NULL);
}
Run Code Online (Sandbox Code Playgroud)

通过以上任何实现,我可以keyboard像这样阅读:

if (key_map[SDLK_Return]) printf("Return has been pressed.");
Run Code Online (Sandbox Code Playgroud)

还有,还有另一种方法吗?

keyboard sdl input

10
推荐指数
2
解决办法
2万
查看次数

PHP 中是否可以显式声明局部变量的类型?

我知道可以声明函数参数、函数返回和类属性的类型。(如下所示)

class HasString {
    private string $value;

    public function getValue() : string
    {
        return $value;
    }

    public function setAttribute(string $arg0)
    {
        $this->value = $arg0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,以下内容将不起作用。

// Tested in PHP 7.4.1
string $localVar = "value"; // Parse error: syntax error, unexpected '$localVar' (T_VARIABLE) in php shell code on line 1
Run Code Online (Sandbox Code Playgroud)

php 是否有可用于显式声明局部变量类型的语法?

这对于捕获变量接收意外值的错误非常有用,并有助于 IDE 在处理混合或未指定的函数返回时识别变量类型。

php

5
推荐指数
2
解决办法
3816
查看次数

在JavaFX 2.0中使用CSS

我试图在JavaFX 2.0中使用CSS.但它不起作用.我试图导入一个CSS文件:

// Import CSS
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.LIGHTGREEN);
scene.getStylesheets().add("example.css");
Run Code Online (Sandbox Code Playgroud)

但NetBeans始终抛出以下异常:

警告:com.sun.javafx.css.StyleManager $ 2运行未找到资源"null".

我试图将CSS文件放在项目目录中,进入src目录并使用绝对路径: "C:\\Users\\janus\\Documents\\NetBeansProjects\\example.css"

没有解决问题

javafx-2

3
推荐指数
2
解决办法
2万
查看次数

有一些方法可以使用g ++ C++编译器将错误日志打印到外部文件中吗?(C++)

我正在尝试使用Windows上的g ++ C++编译器编译我的代码,编译器返回一些错误.好的,像往常一样.但是它打印了很多错误,控制台只是直到最后,我看不到错误日志的第一行.我的问题是:有什么方法可以将错误日志打印到外部文件,这样我就可以阅读完整的错误日志了吗?

g++ *.h *.cpp > error_log.txt
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ compiler-construction logging g++ file

3
推荐指数
2
解决办法
3450
查看次数

如何在C++中优化对象返回?

考虑下面的代码.

// Consider that MyObject receives three integers in it's constructor.
MyObject createObject()
{
    MyObject result(1, 2, 3);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

只要我知道,当你在C++中返回一个对象时(比如在这个函数中),编译器将在客户端的堆栈中创建一个新对象(作为局部变量).在这个例子中,它将是一个MyObject使用带有resultas参数的复制构造函数创建的新对象.这意味着对机器进行冗余处理:result将在堆栈中创建对象,然后创建并返回第二个对象.避免这种情况的另一种方法是动态创建对象(不在堆栈中),然后返回它的指针.但它会导致内存泄漏或强制客户端在使用后删除该对象.所以,我找到的解决方案是使用智能指针,如下所示:

// Consider that MyObject receives three integers in it's constructor.
boost::smart_ptr<MyObject> createObject()
{
    boost::smart_ptr<MyObject> result(new MyObject(1, 2, 3));
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但智能指针仍然是一个将被重新创建的对象(即使成本很低,因为它基本上只包含一个指针).我猜是否有办法更轻松地做到这一点; 或者如果编译器没有一种方法可以优化这项工作或类似的东西.是否有一种语法可以告诉编译器做我想要的事情?

c++ compiler-construction optimization return object

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

在预检请求中不收到 http 403 的情况下通过 AJAX 访问 Genius API 的正确方法是什么?

我正在构建一个非常小的 google chrome 扩展程序,以打开我在 Spotify 上收听的歌曲的Genius歌词页面。我成功地从 Spotify 正确获取了歌曲数据,并且可以向 Genius 验证用户身份,但是当我搜索歌曲时,请求在预检时失败。

Genius 响应{"meta":{"status":403,"message":"Action forbidden for current scope"}},并且 chrome 正在控制台上打印此内容:Response for preflight has invalid HTTP status code 403

尽管 Genius 似乎归咎于令牌的范围,但我尝试使用所有范围(mecreate_annotationmanage_annotationvote)进行身份验证,但问题仍然存在。此外,相同的请求使用相同的令牌与 Postman 一起工作正常。

我的代码如下:

let xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://api.genius.com/search?q=Paranoid", true);
xhttp.setRequestHeader("Authorization", "Bearer " + accessToken);
xhttp.send();
Run Code Online (Sandbox Code Playgroud)

完整的请求:

General
Request URL:https://api.genius.com/search?q=Paranoid
Request Method:OPTIONS
Status Code:403 
Remote Address:104.16.213.100:443
Referrer Policy:no-referrer-when-downgrade

Request Headers
:authority:api.genius.com
:method:OPTIONS
:path:/search?q=Paranoid
:scheme:https
accept:*/*
accept-encoding:gzip, …
Run Code Online (Sandbox Code Playgroud)

javascript ajax rest http google-chrome-extension

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

常量引用的最佳方法或替代方法是什么?

出于此问题的目的,"常量引用"是对对象的引用,您无法从该对象调用修改对象或修改其属性的方法.

我想要这样的东西:

Const<User> user = provider.GetUser(); // Gets a constant reference to an "User" object
var name = user.GetName(); // Ok. Doesn't modify the object
user.SetName("New value"); // <- Error. Shouldn't be able to modify the object
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会使用自定义属性(例如[Constant])标记不修改实例的类的每个方法,并且只能从常量引用调用这些方法.如果可能,在编译期间调用其他方法将导致错误.

我的想法是,我可以返回一个只读引用,并确保它不会被客户端修改.

c# const-correctness compile-time-constant

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

在单个请求中发布多个相关实体的正确 JSONAPI 方式是什么?

在我假设的应用程序中的某个时刻,为了效率,我想在单个请求中创建多个不同类型的相关实体。在下面的示例中,我以包含有关新用户及其相关头像的数据的方式序列化请求。

// POST /api/users
{
    data: {
        attributes: { ... },
        type: 'user',
        relationships: {
            avatar: {
                data: {
                    attributes: { ... }
                    type: 'avatar',
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,在 JSONAPI 中这样做的正确/推荐方法(如果有的话)是什么?

json-api

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

有没有办法创建一个类,该类具有在C++中具有此类对象的类的对象?

在C++中,是否有某种方法可以创建一个类,该类具有作为属性的类的对象,该类具有作为属性的第一个类的对象?

例如:

class A {
    B attribute;
public:
    A(){}
};

class B {
    A attribute;
public:
    B(){}
};
Run Code Online (Sandbox Code Playgroud)

上面的代码不能编译.有什么方法可以做同样的事情吗?

谢谢!

c++ attributes class

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

如何引用类的静态私有对象?

这是上下文:

我有一个应该说'嗨'的A级,但由于A不知道演讲,它使用B级的对象为他演讲.因为A持有B的唯一目的是B演讲它,有不需要每个A拥有它自己的B对象;因此我选择使用唯一的静态私有B.

像这样:

class A {
    static B b;
public:
    void sayHi();
};

void A::sayHi()
{
    b.sayHi();
}
Run Code Online (Sandbox Code Playgroud)

B就像这样:

class B {
public:
    void sayHi();
};

void B::sayHi() 
{
    std::cout << "Hi!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试使用g ++编译器编译此代码时...

int main() {
    A a;
    a.sayHi();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到"未定义的引用"错误.我不知道为什么这不起作用,我想知道编译器认为我指的是A中的非静态B,但我不知道它应该如何.

PS:在我的代码中,B的声明在A声明之前发布.

c++ static refer

0
推荐指数
1
解决办法
348
查看次数