小编mac*_*inn的帖子

为什么LLVM会分配一个冗余变量?

这是一个带有枚举定义和main函数的简单 C 文件:

enum days {MON, TUE, WED, THU};

int main() {
    enum days d;
    d = WED;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它转换为以下 LLVM IR:

define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  store i32 0, i32* %1, align 4
  store i32 2, i32* %2, align 4
  ret i32 0
}
Run Code Online (Sandbox Code Playgroud)

%2显然是d变量,它被分配了 2。%1直接返回零对应什么?

c llvm llvm-codegen

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

C++ 将函数对象作为左值和/或右值传递

我有一个类应该根据用户提供的谓词过滤其内容。我给出的接口规定引用谓词:

\n\n
class Test {\n  vector<int> data;\npublic:\n  template <class PREDTYPE>\n  void filter(PREDTYPE& pred) {\n    return;\n  }\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还得到了一段测试代码,大致如下:

\n\n
class Filter {\npublic:\n  bool operator()(int) const {\n    return false;\n  }\n};\n\nint main() {\n  Test test;\n  test.filter(Filter());\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不会\xe2\x80\x99t 编译,说cannot bind non-const lvalue reference of type 'Filter&' to an rvalue of type 'Filter'。如果我将测试代码更改为

\n\n
int main() {\n  Test test;\n  Filter filter;\n  test.filter(filter);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有效,但这取决于最终用户,我无法控制他们的行为。我尝试重载过滤器方法,创建一个版本,该版本将按值接受谓词,然后通过引用传递它,但这也不会\xe2\x80\x99t编译,并显示消息call of overloaded 'filter(Filter&)' is ambiguous

\n\n

因此我的问题是:是否可以构造一个同时接受谓词的右值和左值的过滤器?

\n

c++ templates function-object

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

Lein fails to add jars to uberjar

我正在构建一个简单的Web应用程序,该应用程序依赖于几个预编译的jar,并且要在Heroku上进行部署。我将罐子放到一个resources文件夹中,并在其中添加了以下几行project.clj

:resource-paths ["resources/jsesh-6.5.5.jar"
                 "resources/jseshGlyphs-6.5.5.jar"
                 "resources/java-cup-11b-runtime.jar"
                 "resources/java-cup-11b.jar"
                 "resources/qenherkhopeshefUtils-6.5.5.jar"]
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用运行项目了lein run -m hieroglyphs.web;但是,当我编译所有内容lein uberjar并尝试

java -cp ./target/hieroglyphs-standalone.jar clojure.main -m hieroglyphs.web
Run Code Online (Sandbox Code Playgroud)

程序启动,但是java.lang.NoClassDefFoundError当尝试访问这些jar中定义的类之一时,崩溃并显示为:

java.lang.NoClassDefFoundError: jsesh/mdcDisplayer/preferences/DrawingSpecification
Run Code Online (Sandbox Code Playgroud)

我是否应该做些额外的事情,以便编译后可以访问jar中定义的类?

所有代码都可以在这里找到:https : //github.com/macleginn/jsesh-web

java jar clojure uberjar leiningen

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

标签 统计

c ×1

c++ ×1

clojure ×1

function-object ×1

jar ×1

java ×1

leiningen ×1

llvm ×1

llvm-codegen ×1

templates ×1

uberjar ×1