我为接收Public Function GetNums(src As String) As String
Dim arr
Dim i As Integer
Dim result As String
arr = Split(src, ";#") ' Split the string to an array.
result = ""
For i = 1 To UBound(arr) Step 2 ' Loop through the array, starting with the second item, and skipping one item (using Step 2).
result = result & arr(i) & ", "
Next
If Len(result) > 2 Then
GetNums = Left(result, Len(result) - 2) ' Remove the extra ", " at the end of the the result string.
Else
GetNums = ""
End If
End Function
的结构实现flatten()
方法。
我希望std::vector
方法仅在使用flatten()
构建MyStruct
时才可用,而不是在使用std::vector<std::vector<Type>>
构建时{和} { {1}}当然不是std::vector<Type>
。
我想知道使用Type
执行此操作的正确方法。
我的结构的签名应该类似于:
std::vector
答案 0 :(得分:3)
为什么你需要enable_if?简单的ol&#39;类型扣除适合您:
template <typename T>
MyStruct<vector<T>> flatten(const MyStruct<vector<vector<T>>>& input) {
// ...
}
编辑:对于您更新的问题,您真的很可能想在这里使用非成员。对于您的客户来说,它是一个更简单的API,并且鉴于此事情正在做什么,flatten可能不需要访问MyStruct的私有位,如果它不需要访问私有位,它应该是非会员非朋友。
如果出于某种原因你想做这件事,你可以使用自由函数为它编写一个特征,然后在static_assert里面写一个特征,类似于:
http://melpon.org/wandbox/permlink/W0NG1VxX4fuia8kM
或
http://melpon.org/wandbox/permlink/UJZ7qliuAqXLSW4b
#include <vector>
#include <type_traits>
template <typename T>
std::false_type is_vector_of_vector_helper(const T&); // not defined
template <typename T>
std::true_type is_vector_of_vector_helper(const std::vector<std::vector<T>>&);
template <typename T>
using is_vector_of_vector_t = decltype(is_vector_of_vector_helper(std::declval<T>()));
template <typename T>
struct MyStruct {
MyStruct<typename T::value_type> flatten() const {
static_assert(is_vector_of_vector_t<T>::value,
"Flatten should only be called with MyStruct<vector<vector<T>>>");
// impl
return {};
}
};