template<class TYPE>
void execute(TYPE data)
{
int size = sizeof(data)*sizeof(TYPE);
}
以上返回错误的结果。
我æ£åœ¨è°ƒç”¨è¿™æ ·çš„模æ¿ï¼š
execute(&variable);
å˜é‡å¯ä»¥æ˜¯ä»»ä½•ç±»åž‹ï¼Œä½†å§‹ç»ˆæ˜¯æ•°ç»„。
我希望代ç 返回大å°ä¸ºï¼ˆæ•°ç»„ä¸å…ƒç´ çš„æ•°é‡ï¼‰*(å˜é‡ç±»åž‹çš„大å°ï¼‰
例如,如果我有一个包å«2ä¸ªå…ƒç´ çš„æµ®ç‚¹æ•°ç»„ï¼Œæˆ‘æƒ³è¿”å›ž2 * 4 = 8;
ç”案 0 :(得分:0)
如果您通常以å—节为å•ä½è®¡ç®—对象的大å°ï¼Œé‚£ä¹ˆæ‚¨å¯èƒ½åšé”™äº†ä»€ä¹ˆï¼
从它的外观æ¥çœ‹ï¼Œä½ 想è¦è®¡ç®—一个数组的大å°ã€‚如果是这ç§æƒ…况,您需è¦é€šè¿‡å¼•ç”¨ä¼ é€’æ•°ç»„ï¼Œå› ä¸ºå®ƒä¼šåœ¨æŒ‰å€¼ä¼ é€’æ—¶è¡°å‡ä¸ºæŒ‡é’ˆï¼š
#include <iostream>
#include <cstddef>
template <typename T>
constexpr std::size_t size_of(T const&) {
return sizeof(T);
}
template <typename T, std::size_t Size>
constexpr std::size_t size(T(&)[Size]) {
return Size;
}
int main() {
int array[5];
std::cout << "size=" << size(array) << '/' << size_of(array) << '\n';
}
代ç 确定对象的char
ä¸ªå…ƒç´ çš„æ•°é‡ï¼ˆé€šå¸¸éžå¸¸æœ‰ç”¨ï¼‰å’Œå¤§å°ã€‚åªèƒ½ä¸ºæ•°ç»„ç¡®å®šå…ƒç´ çš„æ•°é‡ï¼Œè€Œchar
ä¸çš„大å°åº”该适用于所有对象。
ç”案 1 :(得分:0)
使模æ¿ç›´æŽ¥æŽ¥å—数组å¯èƒ½æ›´æœ‰ç”¨ï¼š
template <typename T, std::size_t N>
void execute(T (&data)[N])
{
// array size is N
}
用法:
double x[3] = {};
execute(x);
您甚至ä¸éœ€è¦ä¸ºæ•°ç»„大å°è®¾ç½®å•ç‹¬çš„å˜é‡;它å¯ä»¥ç›´æŽ¥ç”¨ä½œæ¨¡æ¿å‚æ•°N
。