小编sbi*_*sbi的帖子

如何重载"new"运算符以从辅助存储器设备分配内存?

我正在寻找一种语法来从辅助存储设备而不是从默认堆分配内存.

我该如何实现它?malloc()默认情况下使用将它从堆中取出...当然必须有另一种方法!

c++ memory-management c++-faq

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

如何避免包含类实现文件?

而不是做

#include "MyClass.cpp"
Run Code Online (Sandbox Code Playgroud)

我想要做

#include "MyClass.h"
Run Code Online (Sandbox Code Playgroud)

我在网上看到,这样做被认为是不好的做法.

c++ coding-style class include

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

如何在C#中置换对象列表?

我有一个对象列表.我需要这些对象的所有可能的排列.

在C++中,有std::next_permutation().我一直试图在.NET Framework中找到一些东西,但是干涸了.

我错过了什么?

.net c#

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

哪个更快?

我想知道如果它是更快地具有std::vector<std::vector<double>>其中嵌套矢量总是有2个元素,或者是它更快地具有std::vector<MyPoint>其中MyPoint就像定义:

struct MyPoint {
  double Point[2];
};
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ vector

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

将void*user_data转换为object

如何void *something在标准C++中转换为对象?具体来说我想要投射void *userdatastd::map<String, void*>

这可能吗?我在尝试:

//void *user_data is a parameter of this function (callback)
std::map <String, void*> user_data_n; //this line is ok
user_data_n = static_cast<std::map<String, void *>>(*user_data); //I get the errors here.
Run Code Online (Sandbox Code Playgroud)

错误:

Spurious '>>' user '>' to terminate a template argument list
Expected '>' before '(' token
'void *' is not a pointer-to-object type
Run Code Online (Sandbox Code Playgroud)

或者是否有更好的方法来传递有关调用者对象的信息以及我可以传递给的其他一些参数void *user_data

更新:

@aaa carp建议的屁股改为>>,> >前两个错误得到了解决.最后是奇怪,为什么我在这里,而不是铸造它时,把该对象时设置回调时得到这样的消息?

std::map<String, void*> user_data_h;
user_data_h["Object"] = this; //this is …
Run Code Online (Sandbox Code Playgroud)

c++ casting callback

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

派生类中非模板方法的模板方法

class A {
public:
    template<typename T> void func(size_t n, T values[]) { ... }
};

class B : public A {
public:
    void func(size_t n, uint32_t values[]) { ... }
};
Run Code Online (Sandbox Code Playgroud)

调用此代码时,为什么函数B::func() 优先于函数模板A::func()

uint32_t values[5];
A* obj = new B();
obj->func(5, values);
Run Code Online (Sandbox Code Playgroud)

c++ templates class derived

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

如何知道传递给函数的参数是否是c ++中的类,联合或枚举?

我想为所有枚举定义一个运算符<< <<,然后cout该值并打印它是这样的枚举:

码:

enum AnyEnum{A,B,C};
AnyEnum enm = A;
cout << enm <<endl;
Run Code Online (Sandbox Code Playgroud)

输出:

This is an enum which has a value equal to 0
Run Code Online (Sandbox Code Playgroud)

通过使用is_enum结构,我知道使用Boost库执行此操作的方法.但我不明白它是如何工作的.所以这就是为什么,一般来说,我感兴趣的是如何识别veriable是类类型,联合类型还是枚举(在编译时).

c++ enums boost template-meta-programming

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

我如何在C中获得昨天的日期?

我想把昨天的日期变成一个格式的字符:YYYYMMDD(没有斜点等).

我使用此代码来获取今天的日期:

time_t now;

struct tm  *ts;  
char yearchar[80]; 

now = time(NULL);  
ts = localtime(&now);

strftime(yearchar, sizeof(yearchar), "%Y%m%d", ts);
Run Code Online (Sandbox Code Playgroud)

我将如何调整此代码,以便生成昨天的日期而不是今天的日期?

非常感谢.

c date strftime localtime

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

C++继承函数覆盖

我是C++的新手,我来自Java/C#.

我知道在Java和C#中你可以创建一个类,让另一个类继承它,并覆盖它的功能.然后,您可以创建父类的列表,并将子类的对象插入此列表中.之后,您可以使用被覆盖的功能.

例:

public class Parent
{
  public virtual void test()
  {
    Console.WriteLine("test");
  }
}

public class Child : Parent
{
  public override void test()
  {
    Console.WriteLine("test2");
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

List<Parent> tests = new List<Parent>();
tests.Add(new Child());
tests[0].test();
Run Code Online (Sandbox Code Playgroud)

输出:

test2
Run Code Online (Sandbox Code Playgroud)

在C++中,当我这样做时std::vector,它调用父的成员函数,而不是子函数.

如何在C++中完成上述操作?

c++

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

什么是专业化特质成员最便宜的方式

我有一个traits类,它应该只提供一个关于其他类型的信息(以字符串的形式):

template<typename T>
struct some_traits {
    static const char* const some_string;
};
Run Code Online (Sandbox Code Playgroud)

我需要some_string为每种类型提供特殊实例.我知道如何执行此操作的常用方法是仅声明some_traits,然后编写特化:

template<typename T>
struct some_traits;

template<>
struct some_traits<blah> {
    static const char* const some_string;
};
const char* const some_traits<blah>::some_string = "blah string";
Run Code Online (Sandbox Code Playgroud)

然而,当我需要的只是一个专门的代码时,这是很多代码some_string.有没有办法简化这个?

我试图摆弄明确的特化,但未能提出一种语法,不会让编译器向我的脸部吐出有毒的错误信息.

笔记:

  • 我知道我可以把它隐藏在一个宏之后.我仍然很好奇.
  • 这需要在具有GCC 4.1的嵌入式平台上进行编译.所以C++ 03就是我们所拥有的.(Boost很好,但是对于有限的Posix支持,我们坚持使用1.52,以防万一.)

c++ templates type-traits template-specialization c++03

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