小编Bo *_*son的帖子

有没有办法从变量设置模板参数?

我有一个枚举值作为一个类的成员,我想作为模板参数传递?编译器抱怨该成员不能用于常量表达式.这项工作有什么神奇之处吗?

我目前的解决方案是一个switch-case语句,但在我的原始代码中EType有近200个条目.所以我最初的想法是编写一个type_traits,用于将枚举值映射到类型.

这是我的问题的一个例子(也在ideone.com上)(问题是最后一行main()):

#include <iostream>

enum EType
{
    eType_A,
    eType_B,
    eType_C
};

struct Foo
{
    Foo(EType eType)
        : m_eType(eType)
    {
    }

    EType m_eType;
};

template <EType eType>
struct Bar
{
    static std::string const toString()
    {
        return "-";
    }
};

template <>
struct Bar<eType_A>
{
    static std::string const toString()
    {
        return "A";
    }
};

template <>
struct Bar<eType_B>
{
    static std::string const toString()
    {
        return "B";
    }
};

int main(int argc, char *argv[])
{
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

Array变量是否指向自身?

我尝试了一些代码来检查数组和指针的行为.其内容如下.

#include <stdio.h>
main(){
int s[]={1,2};
int *b=s;
printf("%d, %d, %d\n", s, &s, *s);
printf("%d, %d, %d\n", b ,&b, *b);
}
Run Code Online (Sandbox Code Playgroud)

最初我认为指针和数组是相同的但是......
令我惊讶的是,'s'和'&s'的值与'b'不同.这是否意味着一个数组变量"指向自己?"

我现在也对变量"名称"实际上是什么感到困惑?如何与内存中的位置进行绑定?我只是无法想象那里发生的事情!内存(RAM)中的所有信息都是在运行时存储的?

c c++ arrays binding pointers

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

析构函数为原始类型动态分配数组?

如果我想删除动态分配的基本类型值数组:

int *it = new int[10]

我是否只是放入delete [] it析构函数来正确释放内存?

要么

意识到,作为指针是基本类型,删除动态分配的数组会涉及在析构函数中执行类似的操作:

for (size_t idx = 0; idx != 5; ++idx)
        delete sp[idx];
    delete[] sp;
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑,因为我的程序中存在大量与内存相关的错误.

c++ destructor memory-leaks memory-management

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

预编译的头文件和编辑头文件

我在我的项目中使用预编译的头文件.precompile.h包括我创建的*.h文件和来自我从未重建的库中的许多*.h文件.

我的问题是,每次编辑我的一个*.h文件时,它都会编译整个precompile.h文件.这大约需要5分钟.(仅编辑cpp文件后编译只需1秒钟.)

我知道这是预编译头文件的工作方式,但无论如何要分离我的头文件,以便编译器只编译我的文件?

c++ precompiled-headers visual-studio

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

stl设置迭代器

我有一个带有Cell类对象的stl集

class Cell
{
public:
    //Ctor/Dtor
    Cell(size_t cellId=0,int x =0,int y = 0,size_t t = 0):m_cellId(cellId),m_x(x),m_y(y),m_t(t),m_color(WHITE),m_pCellId(0),m_regNum(0){}
    ////////////////////
    //    Mutators    //
    ////////////////////
    void schedNode(size_t t,int nodeId){m_sched[t] = nodeId;}
    void setColor(color c){m_color = c;}
    void setParentId(size_t pId){m_pCellId = pId;}
         //.....
}
Run Code Online (Sandbox Code Playgroud)

每个Cell都有m_xm_y(成员)坐标+其他数据成员(m_t,m_color,m_pCellId,m_regNum)

comapareCells类仅用于根据实际的m_x和m_y坐标查找单元格:

class comapareCells
{
public:
    bool operator()(const Cell& lCell,const Cell& rCell)
    {
        if(lCell.getX() < rCell.getX())
            return true;
        else if(lCell.getX() == rCell.getX())
            return (lCell.getY() < rCell.getY());
        else
            return false;
    }

};
Run Code Online (Sandbox Code Playgroud)

我运行以下命令以找到"实际单元格": c …

c++ iterator stl set

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

在C++ vector <T>中释放内存

以下是我现在可以构建的最佳"最小工作示例".我想了解以下代码是否泄漏了内存.

// Class CTest
class CTest {
  vector<int> Elements;
  CTest (vector<int>&);
  ~CTest ();
};
CTest::CTest (vector<int>& Elements_) {
  this->Elements = Elements_;
}
CTest::~CTest () {
}

// main
int main (int argc, char *argv[]) {
  vector<CTest> V;
  for (auto i = 0; i < 10; i++) {
    vector<int> U;
    for (auto j = i; j < i + 5; j++) U.push_back (j);
    V.push_back (*(new CTest (U)));
  }
  // Do whatever
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我是否正确地认为,由于delete每次调用都没有相应的调用new,这个程序确实泄漏了内存?

c++ memory-leaks

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

Bit Twiddling - 对此程序的输出感到困惑

所以我在C中乱用Bit-Twiddling,我遇到了一个有趣的输出:

int main()
{
    int a = 0x00FF00FF;
    int b = 0xFFFF0000;

    int res = (~b & a);

    printf("%.8X\n", (res << 8) | (b >> 24));
}
Run Code Online (Sandbox Code Playgroud)

此声明的输出是:

FFFFFFFF

我期待输出

0000FFFF

但为什么不是呢?我在这里错过了一些比特移位的东西吗?

c integer bit-manipulation bit-shift

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

获取多选列表框的选定值

我在多选模式下有一个列表框,它是数据绑定的数据库中的15个值.我有这段代码来显示列表框中选中的每个项目的选定值:

        foreach (var list in list_box.SelectedItems)
        {             
            MessageBox.Show(list_box.SelectedValue.ToString());
        }
Run Code Online (Sandbox Code Playgroud)

不幸的是,显示了正确数量的消息框,但它们仅显示已选择的列表中第一个项目的选定值.

有人可以帮我解决这个问题吗?我一直在网上搜索,但我找不到一个正常工作的例子!

c# select list

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

调试使用yasm创建的汇编代码

我需要一些帮助,找到并使用一个好的调试器,用于在64位Linux上与yasm组装的asm代码.gdb调试器一直抱怨没有加载符号表.stackoverflow上有人建议使用-dstabs开关组装,但这对我来说没有任何区别.ddd也没有什么不同.

如果我能找到摆脱"无符号表加载"问题的方法,gdb就不会那么糟糕.我还需要能够查看寄存器和其他声明的内容.

我使用yasm -f elf -m amd64 file.asm和我链接来组装我的asm文件ld file.o -o file.使用-l开关使用yasm创建.lst文件似乎也不起作用.

我发现的关于这个问题的所有建议似乎与使用gcc作为链接器而不是ld有关.我需要能够与ld链接.

x86 assembly x86-64 nasm yasm

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

如果输入不为空,则显示按钮

我不是一个JavaScript大师,所以我需要一个简单的代码帮助.我有一个清除输入字段值的按钮.

如果输入字段为空,我希望隐藏它(按钮),反之亦然(如果输入字段中有文本,则可见).

解决方案可以是纯JavaScript或jQuery,也没关系.越简单越好.

javascript jquery

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