小编Wer*_*nze的帖子

"更喜欢在Kotlin上运行匕首处理器"

每当我注入kotlin类时,我都会在构建中得到这个注释(顺便说一下,我有一个混合的android项目同时使用kotlin和java).

例如,在这个gradle任务之后:compileStagingDebugJavaWithJavac(StagingDebug是我的构建变体),我收到以下消息:

"注意:为com.packageNameXXX.CourseDiscoveryMapFragment生成一个MembersInjector或Factory.更喜欢在该类上运行dagger处理器."

我的CourseDiscoveryMapFragment代码可以在这里看到:

class CourseDiscoveryMapFragment : Fragment(){

    @Inject
    lateinit var presenter: CourseDiscoveryMapPresenter

    lateinit var mapView: MapView

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.fragment_discovery_map, container, false)

        MapsInitializer.initialize(activity)

        mapView = view.mapView
        mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE))

        (activity as BaseActivity)
                .activityComponent.inject(this)
}
Run Code Online (Sandbox Code Playgroud)

我的ActivityComponent是:

@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

    //Exposed to sub-graphs.
    Activity activity();
}
Run Code Online (Sandbox Code Playgroud)

所以,我有用Java编写的匕首组件和模块,同时在Kotlin中进行匕首注射.

这是我应该担心的吗?

谢谢.

android kotlin dagger

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

为什么值返回的对象和方法内部的对象有相同的地址?

#include <stdio.h>
#include <array>
#include <vector>

std::vector<int> foo() {
 int i;
 std::vector<int> a(100);
 printf("%p, %p, %p\n", &i, &a, &(a[0]));
 return a;
}

int main() {
 int i;
 std::vector<int> b = foo();
 printf("%p, %p, %p\n", &i, &b, &(b[0]));
}
Run Code Online (Sandbox Code Playgroud)

为什么a和上面b有相同的地址?这是某种“跨堆栈框架”优化吗?即使我使用该-O0选项,结果也是一样的。

输出:

$ vim main.cpp 
$ cc -std=c++11 -lc++ main.cpp
$ ./a.out
0x7ffee28d28ac, 0x7ffee28d28f0, 0x7ff401402c00
0x7ffee28d290c, 0x7ffee28d28f0, 0x7ff401402c00
$ 
Run Code Online (Sandbox Code Playgroud)

c++ c++11

56
推荐指数
3
解决办法
2861
查看次数

替换数组中元素的快速方法 - C

假设我们有一系列这样的整数:

const int size = 100000;
int array[size];
//set some items to 0 and other items to 1
Run Code Online (Sandbox Code Playgroud)

我想将所有值为1的项替换为另一个值,例如123456.这可以通过以下方式轻松实现:

for(int i = 0; i < size ; i++){
    if(array[i] != 0) 
        array[i] = 123456;
}
Run Code Online (Sandbox Code Playgroud)

出于好奇,有没有更快的方法来做到这一点,通过某种x86技巧,或者这是处理器的最佳代码?

c arrays performance

31
推荐指数
4
解决办法
5万
查看次数

将Tortoise SVN版本号链接到汇编版本

我正在使用Visual Studio中的C#.net开发一个程序,并使用tortoise SVN控制它.

目前我正在根据内部版本号创建程序集版本.

有没有办法可以将项目程序集版本的最后部分链接到tortoise SVN中的修订版号,例如:

伪代码:

[assembly: AssemblyVersion("1.0.0."+SvnRevisionNumber.ToString())]
Run Code Online (Sandbox Code Playgroud)

这将确保我的程序集以其名称命名,而不是它们的构建号,但是在提交到存储库的最后一个修订号之后.

.net c# svn tortoisesvn visual-studio-2010

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

我可以使用#include"pch.h"而不是#include"stdafx.h"作为Visual Studio C++中的预编译头吗?

这是我第一次使用C++并正确地进行编码.我正在关注learncpp.com上的C++教程,我正在使用Visual Studio 2017 ...

在教程中,他们从一些简单的"Hello,world!"开始.代码和他们放在#include "stdafx.h"一起的代码顶部#include <iostream>.当我自己复制此代码并尝试构建它时,我收到错误:

C1010:查找预编译头时意外结束文件.您是否忘记在源代码中添加#include"pch.h"?

当我的解决方案资源管理器找我注意到,在他们的头文件和源文件选项卡教程,他们被称为"stdafx.h中"和"stdafx.cpp"的文件,但对我来说这些文件被称为"pch.h"和"PCH的.cpp".

所以我尝试重命名为#include "stdafx.h"to #include "pch.h",代码构建完美并执行完毕.那么我应该坚持使用#include "pch.h"其余代码还是这个问题?

谢谢!

c++ compiler-errors visual-studio

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

POSTGRESQL中的CHARINDEX(SQL SERVER)等价物是什么?

CHARINDEX在Postgresql 尝试.但它说:

function CHARINDEX() does not exist
Run Code Online (Sandbox Code Playgroud)

如果postgresql中不存在这样的内置函数,那么是否有任何函数可以替代charindex?
如果是,CHARINDEXPOSTGRESQL中的(SQL SERVER)等价物是什么?

postgresql charindex

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

使用mfc的动态菜单

我想在我的主菜单中添加一个菜单项,然后在运行时用项填充它.我该怎么做?除了添加项目,我怎么会有他们的消息映射条目,因为我不知道ID?

c++ mfc

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

Swift使用c结构

对不起标题,我找不到用几句话来形容我的问题.

我已经知道swift可以使用c编写的struct.例如

在Bridging-Header.h中

typedef struct {
    int x;
    int y;
} Pointer;
Run Code Online (Sandbox Code Playgroud)

然后我可以直接使用Pointer.

但就我而言,我有一个用C语言编写的库.有许多带有隐藏工具的结构.例如:
在Briding-Header.h中

typedef struct Pointer Pointer;
Run Code Online (Sandbox Code Playgroud)

我不能再使用Pointer了,得到了未知类型.在我的库中,Pointer用作

create_pointer(Pointer **pointer);
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

PS我没有定义struct Pointer的.h文件.关于Pointer的所有细节都是隐藏,例如,通过函数访问它们

int getx(Pointer *pointer);
Run Code Online (Sandbox Code Playgroud)

这是我的完整测试代码:
user_input.c

#include <stdio.h>

#include "user_input.h"

struct Pointer {
    int x;
    int y;
};

void get_user_input(int *user_input) {
    scanf("%i", user_input);
}

void init_pointer(Pointer *point) {
    point->x = 20;
    point->y = 20;
}
Run Code Online (Sandbox Code Playgroud)

user_input.h

#ifndef __user_input_h__
#define __user_input_h__

typedef struct Pointer Pointer;

void init_pointer(Pointer *p);

#endif
Run Code Online (Sandbox Code Playgroud)

转职Header.h

#include "user_input.h"
Run Code Online (Sandbox Code Playgroud)

main.swift

import Foundation
var …
Run Code Online (Sandbox Code Playgroud)

c struct pointers swift

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

静态成员变量的 C++ 核心指南

我的类中有一个私有静态向量,它保存一个指向所有从它创建的对象的指针。这是必要的,因为每个对象都需要访问来自所有其他对象的信息来执行一些计算:

// Header file:
class Example {
public:
    Example();
private:
    static std::vector<const Example*> examples_;
};
// Cpp file:
std::vector<const Example *> Example::examples_ = {};
Example::Example() {
    // intialization
    examples_.emplace_back(this);
}
void Example::DoCalc() {
    for (auto example : examples_) {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

clang-tidy指出我违反了 C++ 核心指南,即:“变量 'examples_' 是非常量且全局可访问的,考虑将其设置为常量(cppcoreguidelines-avoid-non-const-global-variables)”。

就我个人而言,我没有看到我的代码与核心指南中的示例代码之间的相似之处,尤其是因为该变量在一个类中并且是私有的。实现此功能的“正确”方式是什么?如果可以避免,我不想从 clang-tidy 禁用此检查。

c++ static-members cpp-core-guidelines clang-tidy

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

如何用ClickOnce提供更新说明?

我们有一个应用程序,我编写了很多年,现在我通过ClickOnce推送更新.该应用程序位于我们的主文件服务器上.但是每当我推出更新时,我都会被问到我改变了什么!有没有办法用ClickOnce提供个性化的更新说明,这将是用户友好的?例如,当用户启动他们的应用程序时,ClickOnce会询问"新版本是否可用.您要更新吗?",在下面我可以描述我已更新的内容?或者ClickOnce是不可能的?

c# clickonce updates

8
推荐指数
2
解决办法
4479
查看次数