2012-02-16 70 views
1

在函數內部數組的大小。如果我有C++以下功能:獲取使用C++

void functionName(HANDLE arr[100]) 
{ 
} 

HANDLE hHandles[100]; 
functionName(hHandles); 

有沒有辦法知道functionName內「改編」的大小? (在沒有硬編碼的情況下)

+1

不是沒有把它作爲參數傳遞出去,沒有。這就是std容器存儲數組大小的原因。 – crush 2012-02-16 18:28:44

+0

[相關常見問題](http://stackoverflow.com/questions/4810664/) – fredoverflow 2012-02-16 18:30:18

+0

好的,我以爲我會試試:) – ahmd0 2012-02-16 18:34:53

回答

8

使用模板趕上[N]

template <size_t N> 
void function(HANDLE (&arr)[N]) 
{ 
    std::cout << N << " is here\n"; 
} 
+0

好的,是的,這個使用模板。 – ahmd0 2012-02-17 04:51:45

+0

反正你沒有很多選擇。數組的大小是C++數組類型的一部分的事實是一個非常強大的信息。不使用它會導致低於標準的解決方案。 – 2012-02-17 06:24:10

1

不需要,除非在傳遞之前自己在末尾加上了分隔符。在字符串(字符數組)的情況下,分隔符是空字符'\ 0',因此可以檢查大小。但通常對於數組來說,這是無法完成的。

+0

終結者是一個很好的建議,但有幾種方法可以做到這一點。 – 2012-02-16 18:54:19

0

請考慮發送大小作爲一個單獨的參數。

void functionName(HANDLE arr[100], size_t size) 
{ 
} 
+2

請考慮使用'std :: vector'。 – 2012-02-16 18:59:21

0

你也可以使用全局變量或類屬性的N個T中。

size_t size = 100; 
void functionName(HANDLE* arr) 
{ 
//size will be visible here and in any other 
// functions and you can change its value during run-time 

}