小编fut*_*lib的帖子

将函数放入头文件的经验法则

最近我开始将越来越多的函数放入头文件中,主要是为了方便起见.但我担心我可能会过度使用它,我的标题充满了包含,我不确定这是不是一个好主意.

将函数移出头文件或将其移入头文件有哪些经验法则?

如果你想知道,我说的是开发应用程序,而不是库.

编辑:

我想从我的角度概述内联(自然)头函数与实现函数的优缺点是有帮助的:

专业内联:

  • 更干净/简洁.
  • 不需要签名重复.
  • 无需更改任何Makefile以链接新文件.
  • 即时启动模板参数的能力.

反对内联:

  • 增加编译时间(我不在乎多)
  • 许多包括在标题中(如果他们使用警卫,不应该是一个大问题)

根据这一点,将几乎所有函数放在头文件中似乎是一个好主意,我相信这与STL和Boost正在做的非常接近(尽管这些是库,而不是我的代码).

c++ header function

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

Android:如何移动BitmapDrawable?

我正试图BitmapDrawable在自定义视图中移动.它的工作正常ShapeDrawable如下:

public class MyView extends View {
    private Drawable image;

    public MyView() {
        image = new ShapeDrawable(new RectShape());
        image.setBounds(0, 0, 100, 100);
        ((ShapeDrawable) image).getPaint().setColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        image.draw(canvas);
    }

    public void move(int x, int y) {
        Rect bounds = image.getBounds();
        bounds.left += x;
        bounds.right += x;
        bounds.top += y;
        bounds.bottom += y;
        invalidate();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用a BitmapDrawable,drawable的边界会发生变化,onDraw则会调用该方法,但图像会保留在屏幕上的位置.

以下构造函数将通过创建BitmapDrawable来重现该问题:

public MyView() {
    image = getResources().getDrawable(R.drawable.image);
    image.setBounds(0, 0, 100, 100);
} …
Run Code Online (Sandbox Code Playgroud)

animation android drawable

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

Microsoft Visual Studio:如何在不手动读取输入的情况下保持控制台打开?

我正在用Microsoft Visual Studio 2010 Express编写一些C++,我想知道是否有办法在IDE中的某个地方显示命令输出而不是外部控制台窗口,或者至少保持该窗口打开.

从STDIN读取内容适用于控制台应用程序,但这是一个单元测试用例,我不想修改生成的main函数.还有另外一种方法吗?

c++ console unit-testing visual-studio-2010 visual-studio-express

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

控制台图形如何工作?(少,诅咒,vi ...)

有人可以向我解释一下vi和curses程序管理图形输出的程度如何?他们可以改变屏幕上的个别角色,还是他们必须文学清晰并在任何变化时重绘屏幕?

如果有人能够在没有所有样板代码的情况下将一个较小的克隆组合在一起,那将是非常巧妙的.

c unix curses console less-unix

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

无法使用libzip和FreeType直接从ZIP加载TTF文件

我正在尝试使用libzipFreeType直接从ZIP存档加载TTF文件.

特别是,我正在使用FT_Open_Face函数,该函数可以读取自定义读取/关闭函数(ft_zip_readft_zip_close).但是,虽然文件显然已完全读取,但FT_Open_Face返回FT_Err_Unknown_File_Format.直接从磁盘打开相同的文件工作正常.

我真的不知道如何调试这个,有人可以帮忙吗?

我现在唯一能想到的问题就是我的ft_zip_read功能不支持搜索,文档:

可以调用此函数以执行"计数"为0的搜索或跳过操作.非零返回值则表示错误.

它确实被调用了0次,但我看不出用libzip进行搜索的任何方法.

unsigned long ft_zip_read(FT_Stream stream, unsigned long offset,
                          unsigned char* buffer, unsigned long count)
{
    zip_file* file = static_cast<zip_file*>(stream->descriptor.pointer);
    return zip_fread(file, buffer + offset, count);
}

void ft_zip_close(FT_Stream stream)
{
    zip_file* file = static_cast<zip_file*>(stream->descriptor.pointer);
    zip_fclose(file);
}

FT_Face load_zipped_face(const std::string& name, unsigned int size,
                         const std::string& zip_path)
{
    FT_Library library;
    FT_Error error = FT_Init_FreeType(&library);
    if (error)
        throw freetype_error_string("Failed …
Run Code Online (Sandbox Code Playgroud)

c++ io zip android freetype2

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

如何在C/C++程序中有静态地址?

我一直在寻找Cheat Engine,它允许你检查和操作Windows上正在运行的进程的内存:你根据它们的值扫描变量,然后你可以修改它们,例如在游戏中作弊.

为了编写机器人或类似的东西,您需要为要更改的变量找到一个静态地址 - 即在重新启动进程时保持相同的地址.方法大致如下:

  1. 查找您感兴趣的变量的地址,按值搜索
  2. 查找使用该地址的代码,例如查找它所属的结构的地址(因为结构偏移是固定的)
  3. 寻找指向该指针的另一个指针,直到找到一个带有静态地址的指针(在Cheat Engine中显示为绿色)

从我看过的教程来看似乎工作得很好,但我很难理解为什么它有效.

难道所有变量(包括全局静态变量)都不会在运行时获得相当随机的地址吗?

奖金问题:

  1. Cheat Engine如何判断地址是否是静态的(即重启时保持不变)?
  2. 教程提到了许多旧游戏和一些现代游戏(例如使命召唤4)使用静态地址这一事实.怎么可能?

memory windows operating-system memory-management

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

Android:如何制作模态自定义视图?

我想将自己的对话框完全绘制成自定义视图.我可以以这样的方式显示它,使其显示在所有其他视图之上,并且所有触摸事件(甚至是对话框区域之外的事件)都会重定向到对话框吗?

layout android view

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

如何整理我的网站内容?

组织Web内容的最常用方法是什么,即HTML,JS和CSS?

我通常在小项目中这样做:

  • 的index.html
  • style.css文件
  • 的script.js

我认为这是相当标准的.但是,对于具有多个HTML/JS文件的项目,您如何做到这一点?我的方法是:

  • 的index.html
  • foob​​ar.html
  • style.css文件
  • JS
    • core.js
    • foob​​ar.js

这是一种常见的做法吗?即使只有一个文件,我应该将CSS移动到单独的"css"目录吗?这个中央CSS文件通常如何调用?"style.css"或"base.css"还是其他什么?将HTML文件移动到单独的目录是否常见?

html javascript css project-structure

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

如何通过 Java 控制台应用程序的分页执行“less”?

我需要less从我的 Java 控制台应用程序执行带有分页的命令。但是,我发现执行外部命令的唯一方法是Runtime.getRuntime().exec(),这要求我通过流写入/读取输入/输出。所以像catwork这样的命令(less实际上确实像cat),但我需要分页功能。

在 C 中,我会使用system(). 在 Ruby 中,Kernel.exec完成了这项工作。

有没有办法在Java中完成这项工作?

java console paging less-unix

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

我应该将成员函数虚拟化以使类可测试吗?

我正在研究一个简化版本如下的类:

class Http_server {
public:
    void start(int port)
    {
        start_server();
        std::string content_type = extract_content_type(get_request());
    }

private:
    void start_server()
    {
        ...
    }

    std::string get_request()
    {
        ...
    }

    std::string extract_content_type(const std::string& request) const
    {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我想写一个测试用例extract_content_type.问题是:它是私有的,所以我不能从外面调用它.我可以测试的唯一功能是start,但是那个实际上会启动server(start_server)并等待request(get_request).

我怎么看,我有三个选择:

  1. extract_content_type公众
  2. 提取extract_content_type到实用程序类或命名空间
  3. 制作start_serverget_request虚拟和创建一个覆盖他们模仿对象

我不想公开任何内容或移动到一个只在一个类中使用过一次的实用程序命名空间,所以最不好的选择是选项3.

我在V8代码库中至少看到过一个这样的例子:http: //code.google.com/p/v8/source/browse/trunk/test/cctest/test-date.cc

不过,我不确定这是不是一个好主意.virtual由于两个原因,它不是C++中的默认值:

  1. 它会导致性能/内存开销(尽管在我的情况下可能无关紧要)
  2. 并非每个类都应该用作基类,使其明确也是一个设计决策

你会怎么做?与无用的虚拟生活在一起?或者根本不测试功能?我不是TDD,也不想成为TDD,但是开发像extract_content_type测试这样的函数更容易.

c++ virtual unit-testing mocking

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