基本上,我想让一个函数对于向量(类型)参数和非向量类型参数表现不同。
#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 函数,同时传递一个多重向量作为模板参数,但编译器禁止我这样做。 …
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中导入库,这可以实现吗?
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)
除了使用一个非常复杂的名称来替换我之外,还有其他解决方案吗?
我想在一个线程内共享一个成员变量,但不在线程之间共享.
它的行为类似于静态成员,但它只是一个线程中的"全局",它是一个线程局部变量.
我可以想到两个解决方案:
首先,在每个线程中创建一个局部变量,然后将此变量作为参数传递给使用它的每个方法.(这会导致耦合)
或者,定义一个名为MyStruct的结构,其中包含一个线程局部变量和一个线程ID,然后将所有这些MyStructs作为一个向量,将此向量用作静态成员变量.
每次使用这个成员变量时,首先获取线程ID,然后找到具有相同线程ID的MyStruct,如果没有找到,则推回一个新的MyStruct.在线程结束之前删除此Mystruct.(这很不方便)
有简单的解决方案吗?