小编eme*_*esx的帖子

为什么std :: initializer_list不是内置的语言?

为什么不std::initializer_list内置核心语言?

在我看来,它是C++ 11的一个非常重要的特性,但它没有自己的保留关键字(或类似的东西).

相反,initializer_list只是来自标准库的模板类,它具有来自编译器处理的新braced-init-list语法的特殊隐式映射. {...}

起初认为,这个解决方案非常黑客.

这是现在实现C++语言新增功能的方式:通过某些模板类的隐式角色而不是核心语言?


请考虑以下示例:

   widget<int> w = {1,2,3}; //this is how we want to use a class
Run Code Online (Sandbox Code Playgroud)

为什么选择了新课程:

   widget( std::initializer_list<T> init )
Run Code Online (Sandbox Code Playgroud)

而不是使用类似于以下任何想法的东西:

   widget( T[] init, int length )  // (1)
   widget( T... init )             // (2)
   widget( std::vector<T> init )   // (3)
Run Code Online (Sandbox Code Playgroud)
  1. 一个经典阵列,你可以在const这里和那里添加
  2. 语言中已经存在三个点(var-args,现在是可变参数模板),为什么不重用语法(并让它感觉内置)
  3. 只是一个现有的容器,可以添加const&

所有这些都已经成为语言的一部分.我只写了我的第一个想法,我相信还有很多其他方法.

c++ std initializer-list c++11

93
推荐指数
3
解决办法
8765
查看次数

在C++ 11中声明接口的最佳方法

众所周知,有些语言有接口的概念.这是Java:

public interface Testable {
  void test();
}
Run Code Online (Sandbox Code Playgroud)

如何以最紧凑的方式在C++(或C++ 11)中实现这一点并且代码噪声很小?我很欣赏一个不需要单独定义的解决方案(让标题足够).这是一个非常简单的方法,即使我发现越野车;-)

class Testable {
public:
  virtual void test() = 0;
protected:
  Testable();
  Testable(const Testable& that);
  Testable& operator= (const Testable& that);
  virtual ~Testable();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个开始......而且已经超过了我想要的时间.怎么改进呢?也许在std命名空间的某个地方有一个基类专为此而设计?

c++ polymorphism interface abstract c++11

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

使用Gradle创建Groovy可执行JAR

这是我的gradle构建脚本.

apply plugin: 'groovy'

project.group = "test.tree"
archivesBaseName = "tree"
project.version = "1.0"
manifest.mainAttributes("Main-Class" : "test.tree.App")

sourceCompatibility=1.6
targetCompatibility=1.6

repositories {
    mavenCentral()
}

dependencies {
    groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.6'
    testCompile group: 'junit', name: 'junit', version: '4.8.2'
}
Run Code Online (Sandbox Code Playgroud)

这编译得很好

问题是我无法运行创建的JAR,我得到一个例外 java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

所以我猜groovy插件不包含JAR中的所有必要类.

如何创建一个独立的JAR,我可以简单地运行;-)

groovy gradle

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

最短的C程序仍会导致段错误

有那么一刻,我为自己编写了我的第一个无错误的无错误程序感到非常自豪.这是完整的源代码:

int main;
Run Code Online (Sandbox Code Playgroud)

即使没有int,它也可以完美地编译,但会发出警告(即使没有-Wall),作为一个针对无错误程序的程序员,我将它们视为错误.

我愉快地编写了这个应用程序,我立即赶紧启动它.令我惊讶的是,出现了分段错误错误......


现在认真.究竟发生了什么?

我的猜测如下:缺乏main定义.这是如此明显,但编译器允许它.好的,main可以在不同的单元中定义.但即使链接器也没有做任何事情.有什么特别的原因吗?

c gcc segmentation-fault

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

你如何在Scala中输入Cast/Int?

我有问题让这个演员工作.

编译器告诉我value aNumber不是object的成员Char

def runCastTest() {  
  val aNumber = 97  
  val aChar = (Char)aNumber

  println(aChar) // Should be 'a'  
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

casting scala

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

你能将std :: recursive_mutex与std :: condition_variable结合起来吗?

你可以结合std::recursive_mutex使用std::condition_variable,意思是做这样的事情:

std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
Run Code Online (Sandbox Code Playgroud)

如果不允许,为什么不呢?

我正在使用VC++ 11.

c++ multithreading std c++11 recursive-mutex

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

为什么Math.sin()委托给StrictMath.sin()?

我想知道,为什么Math.sin(double)委托给StrictMath.sin(double)我在Reddit线程中发现问题.提到的代码片段看起来像这样(JDK 7u25):

Math.java:

public static double sin(double a) {
    return StrictMath.sin(a); // default impl. delegates to StrictMath
}
Run Code Online (Sandbox Code Playgroud)

StrictMath.java:

public static native double sin(double a);
Run Code Online (Sandbox Code Playgroud)

第二个声明native对我来说是合理的.国家文件Math说:

鼓励代码生成器使用特定于平台的本机库或微处理器指令(如果可用)

问题是:是不是本机库实现了StrictMath足够的平台?JIT比安装的JRE更了解平台(请关注这个案例)?换句话说,为什么不是Math.sin()本地人呢?

java jit jvm

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

在Java Scripting中用JavaScript脚本绑定方法调用

假设我有一个Javascript文件

function js_main(args){
     /* some code */
     var x = api_method1(some_argument);
     /* some code */
}
Run Code Online (Sandbox Code Playgroud)

我尝试用javax.scripting通常的方式运行它

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval(...);
Run Code Online (Sandbox Code Playgroud)

现在,我想api_method1用Java类处理Javascript 调用.我希望有一些调用的映射/绑定,即每次脚本调用api_method1(arg)一个方法

public Object api_method1(Object arg){ ... }
Run Code Online (Sandbox Code Playgroud)

(将与引擎放在同一个类中)将被调用.

我能做到吗?

javascript java scripting

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

C++ 11移动构造函数未调用,默认构造函数首选

假设我们有这个类:

class X {
public:
    explicit X (char* c) { cout<<"ctor"<<endl; init(c); };
    X (X& lv)  { cout<<"copy"<<endl;  init(lv.c_); };
    X (X&& rv) { cout<<"move"<<endl;  c_ = rv.c_; rv.c_ = nullptr; };

    const char* c() { return c_; };

private:
    void init(char *c) { c_ = new char[strlen(c)+1]; strcpy(c_, c); };
    char* c_;

};
Run Code Online (Sandbox Code Playgroud)

以及此示例用法:

X x("test");
cout << x.c() << endl;
X y(x);
cout << y.c() << endl;
X z( X("test") );
cout << z.c() << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

ctor …
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics c++11

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

Spring AOP - 带有注释的每个方法的切入点

我试图定义一个切入点,它将捕获每个注释的方法(即)@CatchThis.这是我自己的注释.

此外,我想访问该方法的第一个参数,它将是Long类型.可能还有其他争论,但我不关心它们.


编辑

这就是我现在所拥有的.我不知道的是如何传递带注释的方法的第一个参数@CatchThis.

@Aspect 
public class MyAspect {
    @Pointcut(value = "execution(public * *(..))")
    public void anyPublicMethod() {
    }

    @Around("anyPublicMethod() && @annotation(catchThis)")
    public Object logAction(ProceedingJoinPoint pjp, CatchThis catchThis) throws Throwable {
        return pjp.proceed();
    }
}
Run Code Online (Sandbox Code Playgroud)

java aop spring spring-aop pointcut

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