我有一些代码可以执行从int到void*的大量转换,反之亦然(我不在乎它是否丑陋.我喜欢通用的东西)
例:
typedef struct _List {
long size;
long mSize; // Max size
void** elementArray;
}List;
List l;
...
int i = 2;
l.elementArray[i] = i; // Intentional usage of pointer as integer
// Actual size of pointer does not matter
Run Code Online (Sandbox Code Playgroud)
但是当我编译我得到一个bajillion
warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
Run Code Online (Sandbox Code Playgroud)
警告.是否有一面旗帜告诉gcc不打印此特定警告?
我正在和-Wall进行编译,所以我不确定我是否能够轻松地让它消失
这是交易:
当我有一个带有像这样的默认参数的函数时
int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)
如果我错误地这样称呼它:
foo (1, false);
Run Code Online (Sandbox Code Playgroud)
编译器会将 false 转换为 int 指针并调用 b 指向 0 的函数。
我见过人们建议使用模板方法来防止隐式类型转换:
template <class T>
int foo<int> (int a, T* b, bool c = true);
Run Code Online (Sandbox Code Playgroud)
但这种方法太混乱并且使代码变得混乱。
有显式关键字,但它仅适用于构造函数。
我想要的是一种与显式方法类似的干净方法,这样当我声明该方法时,如下所示:
(keyword that locks in the types of parameters) int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)
并这样称呼它:
foo (1, false);
Run Code Online (Sandbox Code Playgroud)
编译器会给我这个:
foo (1, false);
^
ERROR: Wrong type in function call (expected int* but got bool)
Run Code Online (Sandbox Code Playgroud)
有这样的方法吗?
我试图以递归方式查找多种类型的文件,并在找到的每个文件中替换某个字符串.但是当我运行脚本时,它只能找到一种类型的文件.
我正在使用的命令行就是这个
find . -name '*.tcl' -o -name '*.itcl' -o -name '*.db' -exec sed -i 's/abc/cba/g' {} +
Run Code Online (Sandbox Code Playgroud)
每次我运行上面的命令时,它只找到类型的文件.db.当我用单个文件类型运行它时,它工作正常.
我想替换例如文件夹中所有.txt文件中包含的"123"和"321"的所有实例(递归).我想过这样做
sed -i 's/123/321/g' | find . -name \*.txt
Run Code Online (Sandbox Code Playgroud)
但在可能搞砸我的所有文件之前,我想问一下它是否有用.
我正在尝试用VHDL创建一个5维数组,但我不确定如何设置和初始化这些位.
这是我到目前为止:
type \1-line\ is array (4 - 1 downto 0) of unsigned (32 - 1 downto 0);
type square is array (4 - 1 downto 0) of \1-line\;
type cube is array (4 - 1 downto 0) of square;
type hypercube is array (4 - 1 downto 0) of cube;
type \5-cube\ is array (4 - 1 downto 0) of cube;
signal mega_array : \5-cube\;
begin
process (clock, reset) begin
if (reset == '1') then
mega_array <= '0';
end …Run Code Online (Sandbox Code Playgroud) 我有以下一行我要转换为vhdl的verilog代码:
assign {cout,sum} = ( add ) ? ( in_a + in_b + cin ) : ( in_a - in_b - cin );
Run Code Online (Sandbox Code Playgroud)
我将如何在vhdl中执行此操作?
我有以下代码
#ifndef TPSO1_thread_h
#define TPSO1_thread_h
#define _XOPEN_SOURCE
#include <ucontext.h>
struct Thread_Greater;
class Thread {
...
friend struct Thread_Greater;
friend class Scheduler;
};
struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
...
};
#endif
Run Code Online (Sandbox Code Playgroud)
在.h文件中.问题是,当我尝试在xcode中编译它时,它说
#Error: use of undeclared identifier 'std'
Run Code Online (Sandbox Code Playgroud)
在线
struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
Run Code Online (Sandbox Code Playgroud)
有没有包含我遗失的内容?
我正在尝试创建一个应该定义图搜索算法行为的类.
该类接收一个通用容器作为模板参数,并根据容器进行操作
template <typename N, typename E, class Container>
class Frontier {
private:
Container frontier;
public:
bool isEmpty() { return this.frontier.empty(); }
typename Graph<N, E>::const_iterator pop() { return this.frontier.pop(); }
bool push(typename Graph<N, E>::const_iterator it) { return this.frontier.push(it); }
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时我得到了
request for member ‘frontier’ in ‘this’, which is of non-class type
Run Code Online (Sandbox Code Playgroud)
我知道这可以做到,因为stl容器是这样实现的
template<class T, Class C = deque<T> > class std::stack;
Run Code Online (Sandbox Code Playgroud)
我注意到了Class中的大写C,所以我尝试在实现中使用Class但是我从编译器中得到了"Class not defined".我怎么解决这个问题?
我有一个像这样模板化的地图访问者
template <class Map> class MyVisitor : public MyMapVisitor<Map>;
Run Code Online (Sandbox Code Playgroud)
Map必须是std :: map
我想在其中有一个方法,我想创建一个存储在我的地图中的所有成员的列表:
std::vector <Map::*second_template_argument*> toList ();
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?因为我不允许更改MyMapVisitor超类但我可以更改MyVisitor子类.