相关疑难解决方法(0)

此模板代码如何获得数组的大小?

我想知道为什么这种代码可以得到测试数组的大小?我对模板中的语法不熟悉。也许有人可以解释下代码的含义template<typename,size_t>。此外,参考链接也是首选。

#define dimof(array) (sizeof(DimofSizeHelper(array)))
template <typename T, size_t N>
char(&DimofSizeHelper(T(&array)[N]))[N];

void InitDynCalls()
{
    char test[20];
    size_t n = dimof(test);
    printf("%d", n);
}

Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

61
推荐指数
2
解决办法
5332
查看次数

区分字符串文字与字符数组

我想写一些带字符串文字的函数 - 只有一个字符串文字:

template <size_t N>
void foo(const char (&str)[N]);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这太过于扩展并且会匹配任何数组char- 无论它是否是真正的字符串文字.虽然在编译时无法区分它们之间的区别 - 不必在运行时求助调用者包装文字/数组 - 但这两个数组将在内存中完全不同的位置:

foo("Hello"); // at 0x400f81

const char msg[] = {'1', '2', '3'};
foo(msg); // at 0x7fff3552767f
Run Code Online (Sandbox Code Playgroud)

有没有办法知道字符串数据在内存中的位置,以便我至少可以assert使该函数仅采用字符串文字?(使用gcc 4.7.3,但实际上任何编译器的解决方案都会很棒).

c++ gcc templates string-literals

25
推荐指数
2
解决办法
1441
查看次数

验证传递给函数的字符串类型(例如,文字,数组,指针)

我有一个函数,它接受一个字符数组及其大小:

void store_string (const char *p, size_t size); // 'p' & 'size' stored in map
Run Code Online (Sandbox Code Playgroud)

该函数由宏包装为:

#define STORE_STRING(X) store_string(X, sizeof(X))
Run Code Online (Sandbox Code Playgroud)

我的问题是,我想以某种方式禁止或通知用户只应将字符串文字传递给此函数.因为,如果任何指针或本地数组存储在地图内,那么它们可能会超出范围并造成严重破坏!

是否有任何编译时方式(首选)或至少是运行时方式吗?

c c++ string

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

标签 统计

c++ ×3

c ×1

gcc ×1

string ×1

string-literals ×1

templates ×1

visual-c++ ×1