小编Nav*_*K N的帖子

使用boost shared_ptr

我必须使用智能指针,我发现来自boost的"shared_ptr"看起来不错.我下载了boost库,我可以看到很多文件和库.有没有办法只使用shared_ptr?

c++ boost

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

C++可移植开源应用程序的最佳实践

我正在用C++开始一个开源的跨平台项目.我的开发环境是Linux.可能还有其他开发人员也从不同的平台开发.因此,我需要一些帮助来开始配置和开发环境设置,以便来自多个平台的所有开发人员都可以轻松开发.

以下是我的问题

  1. 编译器:我打算使用g ++并听说它是跨平台的.这是一个不错的选择吗?
  2. 制作文件:我看过Code :: Blocks编辑器,它可以在飞行中生成make文件,而不必手动编写.这是最佳做法还是我需要创建make文件?
  3. 开发跨平台应用程序时需要注意哪些其他设置?

有什么想法吗?

编辑

谢谢你的回答.还有一个问题.

你手工创建makefile吗?或者有没有可以生成它的工具?

c++ compiler-construction open-source makefile

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

创建嵌套的makefile

我正在学习makefile,我知道如何创建一个简单的makefile.我正在转向嵌套的makefile.这是我的目录结构

/src
...makefile
...main.cpp
...foo
......makefile
......foo.cpp
......foo.h
Run Code Online (Sandbox Code Playgroud)

当调用root makefile时,它会调用目录foo中的makefile .这是我的问题

  1. 我应该使用哪个makefile来编写链接所有目标文件的代码?如果它在根makefile中,我是否需要在那里指定所有目标文件名?
  2. 这个嵌套的makefile是最佳实践吗?或者只有一个makefile在root上是好的吗?

任何帮助都会很棒!

nested makefile

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

在Windows和LINUX中创建程序库[C++]

我打算在我的C++程序中使用库.开发正在Linux上进行,但应用程序旨在在Linux和Windows上进行编译.据我所知,Windows中共享库(.so)的直接等价物是DLL,对吧?

在使用g ++的Linux中,我可以使用-fPIC-shared标志创建共享库.AFAIK,共享库不需要进行其他代码更改.但是Windows DLL中的情况有所不同.在那里我应该指定必须使用dllexport导出的函数,对吧?

我的问题是如何处理这种情况?我的意思是dllexport在Linux中无效,编译器会出错.但它在Windows中是必需的.那么如何编写一个可以在两个平台上编译而无需更改代码的函数呢?

使用的编译器

  • g ++ - LINUX
  • VC++ - Windows

任何帮助都会很棒!

c++ linux windows shared-libraries

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

在MVVM中创建ViewModel的最佳方法

假设我有一个叫做的课程Customer.现在我需要在视图上呈现客户.所以我创建CustomerViewModel了用于绑定.我正在寻找创建CustomerViewModel课程的最佳方法.以下是我创建它的想法.

1 - 在视图模型上再次创建客户中的所有属性.将客户实例注入视图模型,每个属性将从该客户对象返回值.这种方法的优点是我可以为所有视图模型创建一个公共基类,并在那里转储常用功能.缺点是在视图模型上再次创建所有属性并进行维护所需的时间.

2 - 从客户处获取视图模型.所以我在视图模型中拥有所有客户的特性.但这不允许我使用公共基类并将常见的视图模型逻辑放在那里.

所以我想知道创建视图模型的最佳方法是什么?有没有比我想象的更好的替代方法?

.net design-patterns mvvm

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

包括头文件样式 - C++

我有一个具有以下目录结构的项目.

root
--include
----module1
----module2
--src
----module1
----module2
Run Code Online (Sandbox Code Playgroud)

因此,一个文件说,foo.cppsrc/module1有包括像,

#include "../../include/module1/foo.hpp"
Run Code Online (Sandbox Code Playgroud)

这看起来很混乱,很难写.我发现写作包括喜欢

#include <module1/foo.h>
Run Code Online (Sandbox Code Playgroud)

并提供包含文件搜索路径,以便root/include在编译时整洁.但是,我不确定这种风格有任何缺点.

您更喜欢哪一个?为什么?你也看到以上述方式组织文件有什么问题吗?

c++ header-files

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

const引用临时和复制 - C++

请考虑以下代码,

struct foo
{
    foo()
    {
        std::cout << "Constructing!" << std::endl;
    }

    foo(const foo& f)
    {
        std::cout << "Copy constructing!" << std::endl;
    }

    ~foo()
    {
        std::cout << "Destructing.." << std::endl;
    }
};

foo get()
{
    foo f;
    return f;
}

int main()
{
    const foo& f = get();
    std::cout << "before return" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

MSVC上的输出

Constructing!
Copy constructing!
Destructing..
before return
Destructing..
Run Code Online (Sandbox Code Playgroud)

GCC的产出

Constructing!
before return
Destructing..
Run Code Online (Sandbox Code Playgroud)

MSVC上的结果看起来不正确.

问题

  1. AFAIK,GCC在这里产生正确的结果.为什么MSVC会给出不同的结果以及它为什么要进行复制构建?
  2. const foo& f = get()并且const …

c++ return-value-optimization

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

将trie保留到文件中 - C.

我有一个trie我用来做一些字符串处理.我有一个简单的编译器,它trie从一些数据生成.生成后,我trie不会在运行时更改.

我正在寻找一种方法,我可以将trie保存在文件中并有效地加载它.我已经看过sqllite了解它们是如何持久的,b-tree但它们的文件格式看起来有点先进,我可能不需要所有这些.

如果有人可以提供一些想法来坚持和阅读,那将会很有帮助trie.我用C编程

c serialization persistence trie

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

合并目录和文件路径 - C.

作为学习C的一部分,我编写了以下代码来将目录名与文件名组合在一起.例如:combine("/home/user", "filename") 将导致/home/user/filename.这个功能可以跨平台工作(至少在所有流行的Linux发行版和Windows 32和64位上).

这是代码.

const char* combine(const char* path1, const char* path2)
{
    if(path1 == NULL && path2 == NULL) {
        return NULL;
    }

    if(path2 == NULL || strlen(path2) == 0) return path1;
    if(path1 == NULL || strlen(path1) == 0) return path2;

    char* directory_separator = "";
#ifdef WIN32
    directory_separator = "\\";
#else 
    directory_separator = "/";
#endif

    char p1[strlen(path1)];                    // (1)
    strcpy(p1, path1);                         // (2) 
    char *last_char = &p1[strlen(path1) - 1];  // (3)

    char *combined = malloc(strlen(path1) …
Run Code Online (Sandbox Code Playgroud)

c string refactoring

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

字符串操作和内存分配 - C.

我正在学习C.我有一个方法,需要3个字符串并将它们组合起来做一些操作.以下是我使用GCC编译器的第一个实现.

void foo(const char *p1, const char *p2, const char *p3)
{
    size_t length = strlen(p1) + strlen(p2) + strlen(p3);
    char combined[length + 1];
    memset(combined, 0, length + 1);
    strcat(combined, p1);
    strcat(combined, p2);
    strcat(combined, p3);
    printf("Result : %s", combined);
}

int main()
{
    foo("hello ", "world ", "how");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我使用编译时cc -Wall -pedantic -g foo.c -o foo,我开始收到类似的警告ISO C90 forbids variable length array ‘combined’.MSVC没有编译此代码.更改了代码

void foo(const char *p1, const char *p2, const char *p3)
{
    size_t …
Run Code Online (Sandbox Code Playgroud)

c string portability

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