小编iou*_*vxz的帖子

C++ 如何使用向量<T> 专门化模板?

基本上,我想让一个函数对于向量(类型)参数和非向量类型参数表现不同。

#include <vector>
using namespace std;

template <typename type>
struct is_vector {
    static const bool value = false;
};

template <typename type>
struct is_vector<vector<type>>
{
    static const bool value = true;
};
template <typename type>
type read()
{
    if (is_vector<type>::value)
    {       
        type vec(10);
        vec.front()=1;//left of '.front' must have class/struct/union   
        return vec;
    }
    else
    {
        return{};
    }
}
int main()
{
    auto i= read<int>();
}
Run Code Online (Sandbox Code Playgroud)

我想在使用 vector 作为类型名时返回一个向量,在使用 int 作为类型名时返回一个 int 。

但既然 is_vector(int)::value 返回 false ,为什么我的编译器会报告“‘.front’的左边必须有类/结构/联合”?我怎样才能让它工作?

我想要实现的是将字符串正确反序列化为向量(类型)或向量(向量(类型))。

我需要递归调用 read 函数,同时传递一个多重向量作为模板参数,但编译器禁止我这样做。 …

c++ grammar traits template-meta-programming

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

python ImportError in __del__ ,如何解决这个问题?

class foo:
    def __del__(self):
        import os

p = foo()
Run Code Online (Sandbox Code Playgroud)

这导致了导入错误

Exception ignored in: <function foo.__del__ at 0x000001DF9986DE50>
Traceback (most recent call last):
  File "C:\Users\chen\PycharmProjects\pythonProject\main.py", line 3, in __del__
ImportError: sys.meta_path is None, Python is likely shutting down
Run Code Online (Sandbox Code Playgroud)

我只是用这个例子来演示问题所在,我需要在del中导入库,这可以实现吗?

python exception

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

C++如何使用"loop(n)"来表示"for(int i = 0; i <n; i ++)"?

define绝对不是一个好的解决方案.

#define loop(n) for(int i=0;i<n;i++)
int main()
{
    int i = 0;
    loop(10000) { i++; };
    cout << i << endl;//i==0 here,because of naming duplication.
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

除了使用一个非常复杂的名称来替换我之外,还有其他解决方案吗?

c++ macros

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

如何使静态成员变量在不同的线程中具有不同的值?

我想在一个线程内共享一个成员变量,但不在线程之间共享.

它的行为类似于静态成员,但它只是一个线程中的"全局",它是一个线程局部变量.

我可以想到两个解决方案:

首先,在每个线程中创建一个局部变量,然后将此变量作为参数传递给使用它的每个方法.(这会导致耦合)

或者,定义一个名为MyStruct的结构,其中包含一个线程局部变量和一个线程ID,然后将所有这些MyStructs作为一个向量,将此向量用作静态成员变量.

每次使用这个成员变量时,首先获取线程ID,然后找到具有相同线程ID的MyStruct,如果没有找到,则推回一个新的MyStruct.在线程结束之前删除此Mystruct.(这很不方便)

有简单的解决方案吗?

c++ multithreading

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