小编Ben*_*igt的帖子

特定模板特化的重载成员函数

我有一个类tPoint,可以实现具有不同的基类型

template<typename T>class tPoint{
   T x;
   T y;
public:
   void Set(T ix, T iy){x=ix;y=iy;}
};
Run Code Online (Sandbox Code Playgroud)

当类型T是int时tPoint<int>,我想要一个特殊的Set(float,float),所以我可以在赋值之前舍入值.

我认为,通过专业化,我可以:

template<> void tPoint<int>::Set(float ix,float iy){x=ix+.5; y=iy+.5;}
Run Code Online (Sandbox Code Playgroud)

这样编译器就会抱怨类定义中没有匹配的函数.

但是如果我在类Set(float,float)中声明它然后它已经定义了(当它为T = float编译时)

我希望我明确表示,对此采取干净的做法或者我做错了什么?谢谢!

c++ templates specialization

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

任何cpu和x64之间的托管代码引用

我有一个混合模式C++/CLI项目,编译为x86和x64冻结dll.

我有一个需要使用这个项目的C#应用​​程序,编译为"任何CPU".如何从c#app正确引用正确的dll?如果我右键单击添加引用,我必须只选择2个dll中的一个.
我的"任何CPU"C#应用程序有时会运行为x64,有时运行为x86进程.

我听说你可以通过智能配置文件来做到这一点.

.net c# mixed-mode c++-cli

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

没有调用终结器

我在C#中有一个类,我想在我的课程处理时正确地关闭一些通信端口.但是,退出程序时永远不会调用终结器.这是为什么?难道我做错了什么?

我正在手动调用dispose,它会通过并关闭所有通信.这也没有解雇.

这是我正在使用的终结器:

~Power()
{
    Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)

c# finalizer

5
推荐指数
3
解决办法
4936
查看次数

为什么VS2008 std :: string.erase()会移动它的缓冲区?

我想逐行读取文件并捕获一个特定的输入行.为了获得最大性能,我可以通过读取整个文件并使用指针迭代其内容以低级方式执行此操作,但此代码对性能不重要,因此我希望使用更具可读性和类型安全的标准库样式实现.

所以我拥有的是:

 std::string line;
 line.reserve(1024);
 std::ifstream file(filePath);
 while(file)
 {
    std::getline(file, line);
    if(line.substr(0, 8) == "Whatever")
    {
        // Do something ...
    }
 }
Run Code Online (Sandbox Code Playgroud)

虽然这不是性能关键代码,但我在解析操作之前调用了line.reserve(1024)来排除字符串的多次重新分配,因为读入较大的行.

在std :: getline里面,在添加每行的字符之前删除字符串.我逐步完成了这段代码,以满足自己每次迭代都没有重新分配内存,我发现这些内容让我的大脑充满了热情.

深入string :: erase而不是仅将其size变量重置为零实际上正在调用memmove_s,其指针值会覆盖缓冲区的使用部分,紧跟其后的缓冲区的未使用部分,除了memmove_s正在使用count参数调用零,即请求移动零字节.

问题:

为什么我想在我可爱的循环中调用库函数调用的开销,特别是那个被调用什么都没做的东西?

我自己还没有选择它,但在什么情况下,这个调用实际上什么都不做,但实际上会开始移动大块的缓冲区?

为什么这样做呢?

奖金问题:C++标准库标签是什么?

c++ visual-studio-2008 c++-standard-library

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

使用指向char的指针时访问冲突写入位置

我正在写一个非常简单的程序,从字符串中删除重复的字符.我运行了visual studio并得到了错误:

inteviews.exe中0x00d110d9处的未处理异常:0xC0000005:访问冲突写入位置0x00d27830.

我真的不明白这是什么问题.当前单元格获取下一个单元格的值.

void remove(char *str, char a) {
    while (*str != '\0') {
        if (*(str+1) == a) {
            remove(str + 1, a);
        }

        *str = *(str +1 );//HERE I GET THE ERROR
        ++str;
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    char *str = "abcad";

    while (*str != '\0') {
        remove(str,*str);
        str++;
    }

    std::cout << str << std::endl;

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

编辑:

我已经尝试将其更改为char str[] = "abcad"但我仍然得到相同的错误.

c++ string c-strings

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

我是否需要在实现IDisposable的每个对象中使用"using"关键字?

我正在调用第三方库,其中有很多类实现了IDisposable.

我是否需要在所有这些模式上使用模式?

.net c# idisposable using-statement

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

Bash数组创建:("$ @")vs($ @)

我正在运行一个脚本:./some_script arg1 arg2 "multiple words arg3" arg4.我想将arguments($@)分解为数组.此代码段仅适用于没有空格的参数:

arr=($@)
Run Code Online (Sandbox Code Playgroud)

如果我想将正确的参数存储到数组中,我必须使用:

arr=("$@")
Run Code Online (Sandbox Code Playgroud)

我为什么要用$@引号括起来?

我认为这与参数扩展和特殊参数有关,但我不认为我做得好.

linux bash shell

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

DLL主要在Windows Vs. __attribute __((构造函数))Linux上的入口点

考虑代码

可执行程序:

int main ()
{

    printf("Executable Main, loading library\n");
#ifdef HAVE_WINDOWS
    HMODULE lib = LoadLibraryA ("testdll.dll"); 
#elif defined(HAVE_LINUX)
    void * lib  = dlopen("testdll.so", RTLD_LAZY);  
#endif 

    if (lib) {
        printf("Executable Main, Freeing library\n");
    #ifdef HAVE_WINDOWS
        FreeLibrary (lib); 
    #elif defined(HAVE_LINUX)
        dlclose(lib);   
    #endif 
    }
    printf("Executable Main, exiting\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

DLL

struct Moo
{
    Moo() { printf("DLL Moo, constructor\n"); }
    ~Moo() { printf("DLL Moo, destructor\n"); }
};

Moo m;

#ifdef HAVE_WINDOWS
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved)
{
    switch …
Run Code Online (Sandbox Code Playgroud)

c++ linux windows shared-libraries dllmain

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

sizeof std :: array是否等于普通旧数组的大小?

它有保证sizeof (std::array<T, N>) == N * sizeof (T)吗?

请提供C++标准的支持.

还有一个相关的问题有关std::tr1::array.


为了帮助您入门:

std::array是一个聚合.如果TPOD,那也是std::array<T, N>.这使它也成为标准布局.

应该有一些标准参考连接到禁止填充(允许对齐填充,但数组长度已经是其对齐的倍数).

c++ arrays containers language-lawyer

5
推荐指数
0
解决办法
105
查看次数

计算独特物品的更好方法

我只想找到一种方法来计算向量中的唯一项目数.这是我最天真的做法.

std::vector<Items> v;

// some other work
std::vector<Items> unique_Count;
unique_Count.clear();
std::unique_copy(v.begin, v.end(), std::back_inserter(unique_Count);
int uniqueCount = unique_Count.size();
Run Code Online (Sandbox Code Playgroud)

这是标准库中唯一有或更好的方法吗?

c++ c++-standard-library c++11 c++17

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