小编Dov*_*Dov的帖子

makefile中的错误

我正在使用gnu Make 3.82并且有一个恼人的问题.

我有一个规则设置目录之间的依赖关系.

OBJDIR=../obj

$(objdir)/%.o: %.C
    $(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<
Run Code Online (Sandbox Code Playgroud)

为此,obj目录必须存在.我想将mkdir目录作为先决条件

$(objdir)/%.o: %.C $(objdir)
    $(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<

$(objdir):
    mkdir $(objdir)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它在目录存在时失败然后make停止我尝试shell

if [ ! -d $(objdir) ] ; then  \
  mkdir $(objdir)             \
fi
Run Code Online (Sandbox Code Playgroud)

但显然我有些不对劲.这样做的最佳方法是什么?

directory makefile

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

C++ 0x标准中有什么东西可以支持单独的模板编译吗?

在当前的g ++中,我通常包含所有模板化函数,它们将模板参数作为参数,因为必须为每个实例编译它们.

template<typename T>
class A {
public:
  void f() { ... }
};
Run Code Online (Sandbox Code Playgroud)

所以在不同的来源中,我会写:

#include <A.hh>
A<int> a1;
a1.f();

A<double> a2;
a2.f();
Run Code Online (Sandbox Code Playgroud)

有时,当我一直急于不内联大方法时,我已经手动指定了哪些类将在源文件中使用,但它确实令人讨厌:

template<typename T>
A::A() { ... }

template<typename T>
void A::f() { ... }

A<int>; // manually trigger code generation for int and double
A<double>; 
Run Code Online (Sandbox Code Playgroud)

显然,不同的IDE和编译器都有支持这一点的机制.是否有任何标准强制要求,和/或g ++是否支持这样的事情?

g++ c++11

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

Java中的任何机制都提供编译时代码变体?

我正在为Java中的数据结构编写一组可视化接口.我们的想法是这些类应该是算法的高性能实现,但是使用嵌入式钩子,以便可以交互地显示算法.

这样做有很多原因,但是如果你接受这个面值的请求,我想在算法中嵌入调用来识别刚刚完成的特定子部分.例如,排序算法的一次通过.

我希望图书馆既高效又允许这样做.在C++中,我会插入两个不同的模板或使用条件编译,并且可以合理地生成两个版本的代码.有没有办法在Java中实现这一点?我希望别人可以拿出一个,因为我做不到.

新闻快讯.我试过这个实际的代码.

对于n = 100,000,插入排序大约需要9800毫秒,其中VISUALIZE作为静态变量但不是最终的,而大约3100表示​​已注释掉.因此性能损失是不可接受的.

通过可视化为静态最终,优化器确实检测到它并将其删除,但鉴于它是最终的,我可以用它做什么?我不能动态打开和关闭可视化!

public class TestSort {
    private static boolean VISUALIZE = false; 
    private static ArrayObserver ao;
    public static void insertionSort(int[] x) {
        for (int i = 1; i < x.length; i++) {
            int temp = x[i];
            int j = i - 1;
            if (x[j] > temp) {
                do {    
                    x[j+1] = x[j];
/*              if (VISUALIZE) {
                        ao.compare(i-1, i);
            ao.copy(i-1, i);
            }*/
                } while (--j >= 0 && x[j] > temp);
                x[j+1] = temp;
            } …
Run Code Online (Sandbox Code Playgroud)

java conditional-compilation compile-time

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

Eclipse找不到标准C ++库

我有一台装有mingw的Windows8计算机,它在c:\ mingw中安装了Eclipse可以成功编译程序,但是它认为行包含的错误在编译时可以正常进行。Eclipse找不到库本身。

当我第一次使用CDT组件在eclipse中构建项目时,它会在使用对象的每个#include和每一行上显示错误。

例:

#include <iostream>
using namespace std;

int main() {
  cout << "hello\n";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了include,using和cout <<行上的错误。我可以通过以下方法消除错误:project-> properties C ++ / General Preprocessor Include然后在providers选项卡上,我可以检查“ CDT Build output parser”并按照下面的第一个答案所述修复错误,即向上检查。但这仅适用于该项目。我每次都要这样做。如何在每次构建新项目而无需重新配置每个项目时让Eclipse仅仅接受标准C ++?

通过进入项目设置并添加目录,我已经能够停止包含中的错误:

c:/ bin / mingw / lib / gcc / include ...

这样就使使用对象的错误仍然存​​在。

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string s = "this is a test.";
    regex e("est");
    smatch m;
Run Code Online (Sandbox Code Playgroud)

带有正则表达式的行仍显示错误:即使代码已编译且可识别正则表达式包含,“无法解析正则表达式类型”。

此外,在安装了Mingw的运行Windows 8.1的另一台计算机上,eclipse不会调试。是否有一些有关如何将Eclipse CDT连接到库的文档?

c++ eclipse eclipse-cdt

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

HTML5 如何从文本区域中获取选定的文本

我能够通过记录 onselect 并每次存储开头和结尾来从文本区域中获取突出显示的文本。然后,当我单击按钮时,我自己构建子字符串。是否有更简单的方法来简单地查询选择?

我有点期待 html5 dom 中会有用于所有这些事情的方法,例如:

textarea.getSelectedStart() textarea.getSelectedEnd(); textArea.setSelected(开始,结束);

另外,是否有一种方法可以以编程方式取消选择文本区域中的文本?

我正在根据下面的第一个解决方案输入代码。这种方法可行,但有一个奇怪的问题:

<script language=javascript>
function replaceCLOZE(code, questionType) {
  var v = code.value;
  var s = code.selectionStart;
  var e = code.selectionEnd;
  var t = v.substr(s, e-s);
  var rep = "{:" + questionType + ":="+t+"}";
  code.value = v.substr(0,s) + rep + v.substr(e,v.length-e+1);
}

function shortAnswer(code) {
  replaceCLOZE(code, "SA");
}
function shortAnswerCaseSensitive(code) {
  replaceCLOZE(code, "SAC");
}
function multipleChoice(code) {
  replaceCLOZE(code, "MC");
}
Run Code Online (Sandbox Code Playgroud)

文本区域实际上具有属性 code.selectionStart 和 code.selectionEnd。但上面的代码现在可以工作,将屏幕上突出显示的文本设置为文本区域中的第一个单词。请注意,selectionStart 仍然是正确的,但 Firefox 中实际突出显示的内容是错误的。

在 Chrome 中它工作得很好。也许这只是 Firefox …

html javascript textarea onselect selection-api

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

有没有办法将文件与mercurial合并,但从不尝试解决冲突?

这是一个以下问题:

svn或mercurial版本控制word文档

由于mercurial具有处理压缩文件的能力,因此它可能能够处理word文档.但如果它嵌入了改变文本,那么这个词就会爆炸.

在mercurial中,有没有办法合并文件,或报告它需要手动合并而不实际获取文件并在其中注入坏字符?

merge mercurial ms-word

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

C ++的模块标准是否解决了对调用者隐藏私有数据的问题?

在C ++中,模块被标准化以解决#include膨胀等问题。C ++中的编译器必须解析太多。

而且,由于C ++可以高效地内联存储数据,因此即使调用者也必须知道对象的内存布局。

即将发布的模块标准是否解决了这个问题?

例:

class GLWin {
private:
  GLFWwindow* win;
  glm::mat4 projection;
  ...
};
Run Code Online (Sandbox Code Playgroud)

包含指向内部实现的指针的对象可以通过空声明来解耦,即:

GLFWwindow类;

但是,如果出于性能考虑,我们将mat4对象包含在窗口内,那么我们需要知道大小(当前意味着包含定义),并引入一个头文件,该头文件通常由于级联包括而非常大。模块中是否有任何机制可以隐藏细节并允许为对象保留正确的空间,同时又使它像指针一样不透明?

c++ c++20 c++-modules

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

遍历 unique_ptr 拥有的内存会导致段错误

为了不用记住删除,我们使用unique_ptr来管理内存。我们的印象是我们可以在内存中写入和读取,只是删除取决于智能指针。但是,以下代码在 i=7220 上崩溃并出现段错误。

怎么了?

#include <memory>
using namespace std;

int main() {
  const uint32_t n = 40000000;
  uint64_t*p = new uint64_t[n]; // this works, but we have to delete the memory or leak
  for (int i = 0; i < n; i++)
    p[i] = i;

  unique_ptr<uint64_t> mem = make_unique<uint64_t>(n);

  uint64_t* p1 = mem.get();
  for (int i = 0; i < n; i++) // this crashes at i=7220
    p1[i] = i;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr

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

Java 有与 C++ string_view 等效的东西吗?

Java 有 StringBuilder 用于生成不断增长的字符串,但不幸的是,大多数 API 使用 String,因此一切都需要转换,并伴随着复制开销。

在编译器上,假设有一个 char 数组。是否有任何类可以提供只读 StringView (如 C++17 string_view)?如果没有,我可以轻松地编写诸如类之类的内容,但问题是由于其他所有内容都处理字符串,因此会失去一些好处。这个想法是提供一些看起来像字符串的东西,其中构造函数只是:

StringView(char[] bigBuffer, int start, int len) {}
Run Code Online (Sandbox Code Playgroud)

并在任何需要使用字符串的地方使用该类。

java string performance immutability

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

有没有办法以编程方式强制操作系统在Java中切换语言输入?

每个操作系统都有不同的方案来更改键盘或鼠标的语言.Java中是否有任何API支持以编程方式更改语言?

我想要的是一个带有两个JTextField对象的翻译器.如果我输入一个,我会自动输入英文,如果我输入另一个,我想自动切换到另一种语言.如果该语言是日语或中文,我希望操作系统在进入该组件时自动切换到该语言,而无需每次都手动切换.下面是一些使用Locale和InputContext的示例代码.它表明它成功设置了上下文,但我输入并且英语出来了.与我手动切换到日语相比,键入将导致日语字符.我做错了什么?

public class TestLocale extends JFrame {
    public TestLocale() {
    super("TestLocale");
    setSize(600,600);
    JTextField a = new JTextField("English");
    JTextField b = new JTextField("Japanese");
    Locale loc =Locale.JAPANESE;
    System.out.println("Script: " + loc.getScript());
    System.out.println("Language: " + loc.getLanguage());
    b.setLocale(loc);
    b.addMouseListener(new MouseAdapter() {
        public void mouseEntered(MouseEvent e) {
            InputContext c = InputContext.getInstance();
            boolean b = c.selectInputMethod(Locale.JAPANESE);
            System.out.println("Trying to request Japanese: " + b);
        }
        } );
    add(BorderLayout.NORTH, a);
    add(BorderLayout.SOUTH, b);
    setVisible(true);
    }
    public static void main(String[] a) {
    TestLocale t = new TestLocale();
    }
} …
Run Code Online (Sandbox Code Playgroud)

java swing locale jtextfield

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