Tôi đã cố gắng sử dụng tăng tùy chọn cho một hàm có thể trả về một đối tượng hoặc một null và tôi không thể tìm ra nó. Đây là những gì tôi có cho đến nay. Bất kỳ đề xuất nào về cách giải quyết vấn đề này sẽ được đánh giá cao.thất bại khi sử dụng boost :: optional
class Myclass
{
public:
int a;
};
boost::optional<Myclass> func(int a) //This could either return MyClass or a null
{
boost::optional<Myclass> value;
if(a==0)
{
//return an object
boost::optional<Myclass> value;
value->a = 200;
}
else
{
return NULL;
}
return value;
}
int main(int argc, char **argv)
{
boost::optional<Myclass> v = func(0);
//How do I check if its a NULL or an object
return 0;
}
Cập nhật:
Đây là mã mới của tôi và tôi nhận được một lỗi biên dịch tại value = {200};
class Myclass
{
public:
int a;
};
boost::optional<Myclass> func(int a)
{
boost::optional<Myclass> value;
if(a == 0)
value = {200};
return value;
}
int main(int argc, char **argv)
{
boost::optional<Myclass> v = func(0);
if(v)
std::cout << v -> a << std::endl;
else
std::cout << "Uninitilized" << std::endl;
std::cin.get();
return 0;
}
Tôi bối rối với 'value = {200}' Isnt nó sẽ là 'value-> a = 200'? – MistyD
@MistyD, hãy xem bản chỉnh sửa. – soon
Cảm ơn bạn đã chỉnh sửa.Nhưng với 'value = {200};' tôi nhận được lỗi biên dịch khi xây dựng 'lỗi C2143: lỗi cú pháp: thiếu ';' trước '{' ' – MistyD