获å–模æ¿å˜é‡çš„类型和大å°

时间:2013-12-06 23:52:55

标签: c++

template<class TYPE>
void execute(TYPE data)
{
    int size = sizeof(data)*sizeof(TYPE);
}

以上返回错误的结果。

我正在调用这样的模æ¿ï¼š

execute(&variable);

å˜é‡å¯ä»¥æ˜¯ä»»ä½•ç±»åž‹ï¼Œä½†å§‹ç»ˆæ˜¯æ•°ç»„。

我希望代ç è¿”回大å°ä¸ºï¼ˆæ•°ç»„中元素的数é‡ï¼‰*(å˜é‡ç±»åž‹çš„大å°ï¼‰

例如,如果我有一个包å«2个元素的浮点数组,我想返回2 * 4 = 8;

2 个答案:

答案 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。